Conda配置Python虚拟环境以搭建实验环境

Conda配置Python虚拟环境以搭建实验环境

故事起源

故事起源于人工智能导论的一个实验,其中用到了华为开源自研AI框架MindSpore,需要在pycharm里面配好虚拟环境,安装好需要的包,否则代码跑不起来。

用到的软件:

  • PyCharm Community Edition 2020.3.3
  • Anaconda3-2022.05-Windows-x86_64

首先需要导入mindspore包:

import mindspore.nn as nn

这个包在anaconda网站上没有,无法通过pycharm IDE自动安装,我们得手动安装。

报错旁边那个小灯泡提示是pycharm里的智能报错处理程序(快速修复),点一下提示你有哪几种解决方案,点击对应方案即可执行。导入一些常用的anaconda网站有的包,如numpy,很方便,点一下就好;纠正一些很低级的语法错误也很方便。

如果你点了自动安装的话,会在右下角出现安装包失败的提示信息:

image-20220605121724686

image-20220605121952291

详细信息是这样的:

大意就是说在当前默认的channels里面找不到这个包,无法采用 conda install -p mindspore_py39 mindspore -y指令直接安装。(看已执行命令那一栏可以知道。)

为了写博客,我把原来建好的mindspore_py39这个虚拟环境里面的mindspore包卸载了,pycharm里用的仍然是这个虚拟环境。

去官网mindspore安装,对应自己的机器架构选择相应的安装方式,因我之前安装了anaconda,这里采用conda安装方式。

新建一个虚拟环境

接下来跟着下面的安装教程走:

创建并进入Conda虚拟环境

根据您希望使用的Python版本创建对应的Conda虚拟环境并进入虚拟环境。 如果您希望使用Python3.7.5版本:

conda create -c conda-forge -n mindspore_py37 -c conda-forge python=3.7.5
activate mindspore_py37

打开Anaconda Prompt控制台,会是这个样子:

image-20220605112322887

我们先用conda create -h命令看看上面的指令的大致意思:

image-20220605123306296

`一些用到的选项`
Channel Customization:
  -c CHANNEL, --channel CHANNEL
                        Additional channel to search for packages. These are URLs
                        searched in the order they are given (including local directories
                        using the 'file://' syntax or simply a path like
                        '/home/conda/mychan' or '../mychan'). Then, the defaults or
                        channels from .condarc are searched (unless --override-channels
                        is given). You can use 'defaults' to get the default packages for
                        conda. You can also use any name and the .condarc channel_alias
                        value will be prepended. The default channel_alias is
                        https://conda.anaconda.org/.
Target Environment Specification:
  -n ENVIRONMENT, --name ENVIRONMENT
                        Name of environment.

所以这两句的意思是:

conda create -c conda-forge -n mindspore_py37 -c conda-forge python=3.7.5 
`搜索包的频道为conda-forge,新建一个名为mindspore_py37的虚拟环境,虚拟环境对应的python解释器版本为3.7.5`
activate mindspore_py37
`激活这个虚拟环境,即从当前虚拟环境切换到mindspore_py37这个虚拟环境`

于是适用于我们机器的指令应为:

conda create -c conda-forge -n mindspore_py39 -c conda-forge python=3.9.12
activate mindspore_py39

查看python版本:cmd 输入 python --version

image-20220605125421493

或者去anaconda安装目录,运行其下的python.exe解释器:

将指令输入到Anaconda Prompt控制台,可以看到我们的虚拟环境从默认的(base)变成了我们新建的(mindspore_py39)

本地文件里也多了这个虚拟环境文件夹:

envs目录存储你用conda建里的所有虚拟环境。(区别于默认的环境base)

其下的Lib>site-packages目录里也有了些基础包:

在虚拟环境中安装要用到的包

跟着教程走,继续输入指令:

conda install mindspore-cpu -c mindspore -c conda-forge

从mindspore和conda-forge这两个频道搜索并安装名为mindspore-cpu的包

安装MindSpore

确认您处于Conda虚拟环境中,并执行如下命令安装最新版本的MindSpore。如需安装其他版本,可参考版本列表mindspore-cpu=后指定版本号。

conda install mindspore-cpu -c mindspore -c conda-forge

安装的包安在本地的路径的哪里?

安装完毕后输出了done,可在site-package里看到新安装的包:

image-20220605131251529

设置Python解释器-切换项目运行的虚拟环境

回到pycharm重新设置此项目的Python解释器:

这里需找到新建虚拟环境文件夹中的python.exe,作为项目的Python解释器。
我的理解是,Python解释器设置成哪个虚拟环境中的,项目运行时的虚拟环境就是对应的虚拟环境,用到的包也在这个虚拟环境文件夹中找,找到了就能import。

可以在这里的页面看到需用的包mindspore-cpu

右下角可以快速设置、添加Python解释器:

试图运行写好的train.py文件,结果报了个错:

搜了一下,发现直接用 pip install easydict就能安装。

注意这里的虚拟环境是哪个,安装的时候就会安装到哪个虚拟环境中,确认一下是要用到的mindspore_py39就行。

要是图省事,也可在pycharm里面的终端安装包:

image-20220605133630528

记得确认下虚拟环境是不是你项目运行的那个虚拟环境。

运行一下,发现跑起来了:

到此,虚拟环境配置完毕。(~ ̄▽ ̄)~

pip使用国内镜像源

有时pip install指令安装一些包的时候,由于要访问外网,下载速度太慢了无法接受,故需改用国内镜像源以大幅度提高下载速度。

照着菜鸟教程弄就行,这里我的C:\Users\xx\目录下一开始是没有pip文件夹的,只要新建一个pip文件夹,在里面写一个pip.ini文件就行。

pip安装方式和conda安装方式的区别

如果你的Python解释器设置成了Python安装目录下的Python.exe,则在快速修复自动导入包时会使用pip命令安装相应的包。
如果设置成了anaconda安装目录下的Python.exe,则会使用conda命令安装相应的包。

pip指令

pip指令下,对于mindspore这个包,由于可以直接用pip install mindspore安装,快速修复自动导入是能导入成功的。
如下图,我新建了一个虚拟环境,用的是Python安装目录下的Python.exe,快速修复直接就给我导入好了mindspore模块。

image-20220606123631985

image-20220606123700388

image-20220606123732278

image-20220606123921137

image-20220606123749420

原来的报错也没了。
Python安装路径的Lib->site-packages里多了mindspore相关的文件。

image-20220606124208891

实际上你在pycharm终端里直接运行

pip install mindspore

就能安装这个包,使import mindspore指令生效。

实际这就是mindspore官网给出的pip安装方式。

用此种方式,实际是pycharm将cmd内嵌到IDE中,在其中使用pip安装方式,会将安装的包安在Python安装目录下的Lib->site-packages中。

pycharm内嵌终端开头输出的字样:

image-20220606131124619

cmd的开头输出字样:

image-20220606131226112

如果使用conda管理的虚拟环境,pycharm内嵌的终端会默认直接激活并切换到那个虚拟环境中:

image-20220606131413945

用Python安装目录下的python.exe作为Python解释器,默认工作目录即为项目所在目录:

image-20220606131553665

而anaconda prompt的默认工作虚拟环境是(base):

image-20220606131811129

conda指令

若环境的Python解释器设置成anaconda安装目录下的Python.exe,执行快速修复时会使用conda指令来安装对应的包。而对于mindspore这个包,它不在anaconda默认的包安装频道(channels)里,找不到这个包,快速修复也就无法安装这个包。

实际上这个快速修复就是在终端里跑下面的指令:

D:\Python\anaconda3\Scripts\conda.exe install -p D:/Python/anaconda3/envs/mindspore_py39 mindspore -y

将路径略去,实际上就是:

conda install -p mindspore_py39 mindspore -y

对比mindspore官网给的conda安装方式指令:

conda install mindspore-cpu -c mindspore -c conda-forge

附加了包所在的频道mindspore,和包用到的一些依赖文件所在的频道conda-forge,故可以安装。

而我们的指令无法安装mindspore这个包,因为默认的channels里找不到这个包,又没有通过附加指令选项指定额外的搜索channels,就找不到这个包,导致无法安装。

我们打开anaconda官网,搜索这个包:

发现在MindSpore这个频道下,还是有这个包的。

找到了需要的包,在pycharm的终端里执行安装命令

conda install -c mindspore mindspore-cpu

image-20220606125545081

我们通过这种看报错信息进行手动安装的方式也把这个包安好了并导入了。

我们可以看到,安装同一个包mindspore,用pip install mindspore就行,用conda install mindspore就不行,就找不到这个包,需指定额外的包搜索频道。说明pip安装指令,其默认的包库很大,已经包含了mindspore这个包,而conda默认的包搜索频道就比较小。

我觉得,conda安装方式可以再改进一下,在当前设置的搜索频道找不到就自动去官网搜索包名,若在其他的频道找到了这个包就自动去安装。(或者其实是有这个功能的,只是我不会用?这样一个方便的包管理工具应该像这样智能的啊。)

pycharm的图形化包管理功能

左上角点击 文件-设置 出现的弹窗,打开 项目-Python解释器 选项卡:

image-20220606133104001

搜索到包后安装即可:

点击 管理存储库 可添加包搜索的网站,默认是只有https://pypi.python.org/simple:

若在pycharm里设置anaconda安装目录下的python.exe文件做Python解释器,并使用conda作为包管理工具,则无法显示包的最新版本:

点 + 号之后也搜不到包:

管理存储库中是空的:

对比一下还是pip指令更方便一点,pycharm对其的支持也更好。或者可能是我还不会用conda,有些地方没搞好。

posted @ 2022-06-05 14:32  Matrix_250  阅读(243)  评论(1编辑  收藏  举报