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
,很方便,点一下就好;纠正一些很低级的语法错误也很方便。
如果你点了自动安装的话,会在右下角出现安装包失败的提示信息:
详细信息是这样的:
大意就是说在当前默认的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
控制台,会是这个样子:
我们先用conda create -h
命令看看上面的指令的大致意思:
`一些用到的选项` 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
:或者去
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
里看到新安装的包:
设置Python解释器-切换项目运行的虚拟环境
回到pycharm重新设置此项目的Python解释器:
这里需找到新建虚拟环境文件夹中的
python.exe
,作为项目的Python解释器。
我的理解是,Python解释器设置成哪个虚拟环境中的,项目运行时的虚拟环境就是对应的虚拟环境,用到的包也在这个虚拟环境文件夹中找,找到了就能import。可以在这里的页面看到需用的包
mindspore-cpu
。
右下角可以快速设置、添加Python解释器:
试图运行写好的train.py
文件,结果报了个错:
搜了一下,发现直接用 pip install easydict
就能安装。
注意这里的虚拟环境是哪个,安装的时候就会安装到哪个虚拟环境中,确认一下是要用到的
mindspore_py39
就行。要是图省事,也可在pycharm里面的终端安装包:
记得确认下虚拟环境是不是你项目运行的那个虚拟环境。
运行一下,发现跑起来了:
到此,虚拟环境配置完毕。(~ ̄▽ ̄)~
附
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
模块。
原来的报错也没了。
Python安装路径的Lib->site-packages
里多了mindspore
相关的文件。
实际上你在pycharm终端里直接运行
pip install mindspore
就能安装这个包,使import mindspore
指令生效。
实际这就是mindspore官网给出的
pip
安装方式。
用此种方式,实际是pycharm将cmd
内嵌到IDE中,在其中使用pip
安装方式,会将安装的包安在Python安装目录下的Lib->site-packages
中。
pycharm内嵌终端开头输出的字样:
cmd的开头输出字样:
如果使用conda管理的虚拟环境,pycharm内嵌的终端会默认直接激活并切换到那个虚拟环境中:
用Python安装目录下的python.exe作为Python解释器,默认工作目录即为项目所在目录:
而anaconda prompt的默认工作虚拟环境是(base):
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
我们通过这种看报错信息进行手动安装的方式也把这个包安好了并导入了。
我们可以看到,安装同一个包mindspore
,用pip install mindspore
就行,用conda install mindspore
就不行,就找不到这个包,需指定额外的包搜索频道。说明pip
安装指令,其默认的包库很大,已经包含了mindspore
这个包,而conda
默认的包搜索频道就比较小。
我觉得,conda
安装方式可以再改进一下,在当前设置的搜索频道找不到就自动去官网搜索包名,若在其他的频道找到了这个包就自动去安装。(或者其实是有这个功能的,只是我不会用?这样一个方便的包管理工具应该像这样智能的啊。)
pycharm的图形化包管理功能
左上角点击 文件-设置 出现的弹窗,打开 项目-Python解释器 选项卡:
搜索到包后安装即可:
点击 管理存储库 可添加包搜索的网站,默认是只有https://pypi.python.org/simple:
若在pycharm里设置anaconda安装目录下的python.exe文件做Python解释器,并使用conda作为包管理工具,则无法显示包的最新版本:
点 + 号之后也搜不到包:
管理存储库中是空的:
对比一下还是pip
指令更方便一点,pycharm对其的支持也更好。或者可能是我还不会用conda
,有些地方没搞好。