Python虚拟环境最佳实践
正文共:2059 字
预计阅读时间: 6 分钟
Python虚拟环境工具众多,我也使用了众多工具,最终还是选择了Anaconda下的conda工具作为虚拟环境搭建的工具,在正式开始前,说一下我此前的环境。
系统环境:Mac Pro
使用pyenv作为python版本控制,下载了python2.7、python3.6、python3.5等版本,使用pyenv-virtualenv作为虚拟环境控制的插件工具,两者其实挺好用的,然后我使用pyenv安装了anaconda 4.4.0并再其下使用conda来创建虚拟环境,就是所谓的虚拟环境中的虚拟环境。
因为某些原因,将系统当前的pyenv相关的虚拟环境都删除了,决定使用anaconda重新弄一套虚拟环境,完全用conda来管理,不再弄那么复杂。
首先去anaconda官网安装,这里选择安装anaconda 5.5.0,其内置python为python3.7,这个包的大小为600多M,解压安装后会占用磁盘2.2G,我也没想到居然这么大,无奈。
安装完后,就要配置一下环境变量,Mac下的环境变量比较复杂,环境变量由多个文件控制,这些文件的优先级也不同,因为本人使用了zsh,所有处理在系统的环境变量配置文件中配置anaconda的路径,还需要在zsh的环境变量配置文件中配置,这是必要的,不然zsh中也无法直接使用conda。
echo ". /Users/ayuliao/anaconda3/etc/profile.d/conda.sh" >> ~/.bash_profile
echo "conda activate" >> ~/.bash_profile
echo ". /Users/ayuliao/anaconda3/etc/profile.d/conda.sh" >> ~/.zshrc
echo "conda activate" >> ~/.zshrc
source .zshrc
source .bash_profile
具体的路径需要根据自己的路径来确定。
因为本地不再使用Mac自带的命令行,所以.bash_profile文件不用写也没问题,只使用zsh,还有需要提及的就是 echo"conda activate">>~/.zshrc
在conda 4.4之后支持,此前的将conda引入PATH的方法变得不再推荐。
这样就可以全局使用conda了,首先使用conda来创建一个虚拟环境
conda create -n tfpy36 python=3.6
创建完后,先来安装一下TensorFlow,这里安装1.9版本的,当前最新版为1.12,不得不说TensorFlow更新的很快。
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com --upgrade tensorflow==1.9
安装完后,可以进入python交互环境测试是否可以导入,通常没什么问题,然后我习惯性的安装ipython与jupyter,带来了问题。
ipython与jupyter都是在虚拟环境下安装的,但进入ipython,发现是anaconda原本的python环境,即python3.7版本,此时无法通过ipython导入虚拟环境中安装的TensorFlow,有点懵,接着尝试jupyter,也是同样的情况,回想使用pyenv安装anaconda再在改anaconda下创建虚拟环境并安装TF不同,在此前的环境中虚拟环境中安装的ipython会被安装在虚拟环境中,可以直接导入虚拟环境的TF。
这个问题应该不少见,所以查了一下,anaconda为了避免你在不同的虚拟环境都每次都要安装ipython或jupyter,将这些都安装在了根环境,安装 ipykernel
解决问题,这个库会为ipython或jupyter提供虚拟环境壳的支持。
conda install ipykernel
至此,整个环境搞定,conda除了可以使用python3,同时还可以使用python2,非常方便。
但还有可能在ipython可以使用不同版本的虚拟环境,但在jupyter无法使用不同版本的虚拟环境,此时就可以安装
conda install nb_conda
这样就可以直接进入jupyter选择不同的虚拟环境了,如下图:
删除环境
conda remove -n tfpy36 --all
激活环境
source activate tfpy36
退出环境
source deactivate
小结
python中很多工具都可以进行版本控制与虚拟环境的控制,我使用个多种,但最总还是返璞归真,使用anaconda提供的这套解决方案一劳永逸。
2018版的PyCharm本身也支持创建新项目时,在工作目录创建相应的python环境,但我个人通常不这么做,因为每个项目都创建一个python虚拟环境其实没什么必要,只需要几个主的python虚拟环境则可,比如做web的,就创建pyweb虚拟环境,以后web相关的开发都使用该虚拟环境,这样方便管理。