大家都知道python创建项目是一件很头疼的事情~从github上克隆下来的项目经常因为由于存在各种依赖、冲突等问题,导致运行会出现各种error,比如大家克隆一个django项目,1.9和2.x版本会有很多地方都不一样,再比如像sklearn、tensorflow、pytorch等机器学习、深度学习项目,也经常会经常版本问题产生各种各样的小问题,忙来忙去发现花在这上面的时间最多,所以其实理论上,如果我们需要很方便地部署一个项目到任何地方的时候,我们应该对每一个项目都进行虚拟化(当然也可以用docker部署,docker比起python虚拟环境,则更加工程化,不仅仅适用python,而是适用任何项目,甚至是操作系统、集群等,下一篇文章准备写一个docker使用心得)。
好,下面让我们开始进入python虚拟环境的世界,我们常见的一些python虚拟环境有如下工具:
我们今天只介绍 conda + virtualenv的联合使用,对于每个python项目,我们都会有一个venv文件夹用于存储该项目所有的依赖。
首先,我们从anacodna官网上下载anaconda
wget https://repo.anaconda.com/archive/Anaconda3-2018.12-Linux-x86_64.sh
chmod +x Anaconda3-2018.12-Linux-x86_64.sh
./Anaconda3-2018.12-Linux-x86_64.sh
按照步骤即刻一步一步安装好Anaconda3,查看~/.zshrc文件中的Anaconda3添加项。
# added by Anaconda3 2018.12 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/usr/local/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
\eval "$__conda_setup"
else
if [ -f "/usr/local/anaconda3/etc/profile.d/conda.sh" ]; then
. "/usr/local/anaconda3/etc/profile.d/conda.sh"
CONDA_CHANGEPS1=false conda activate base
else
\export PATH="/usr/local/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda init <<<
我们可以看到,这里Anaconda3默认已经将base中的python环境激活了,也就是Anaconda3中的base本身其实也是一个conda创建的基础环境,安装Anaconda3对CentOS中自带的python版本完全没影响,在进入shell中就已经激活了conda中自带的base环境,可看到上面shell代码中的conda activate base,安装anaconda后,我们完全可以安装任何版本的python,有时候这个是必须的,因为有些项目使用python2开发,有时候不得不安装python的旧版本,对于tensorflow-gpu,则更是(暂时)不支持最新的python3.7,所以笔者的服务器中安装了几乎所有的python版本(2.7,3.5,3.6,3.7这几个是必须的)。
利用conda命令安装虚拟环境
conda create -n py27 python=2.7
安装好之后可以利用如下命令激活虚拟环境
source activate py27
其中py27是之前命名的虚拟环境的名字,激活环境之后我们可以使用以下命令
pip -V
可以看到pip的路径为:
pip 19.0.1 from /usr/local/anaconda3/envs/py27/lib/python2.7/site-packages/pip (python 2.7)
可以看到pip的路径为虚拟环境中的python2.7中的pip,此时我们使用pip install 即可将包安装到我们刚刚安装好的py2虚拟环境中。
可以使用如下命令退出该激活环境
source deactivate py27
为什么要用conda创建虚拟环境呢?笔者总结了几点原因如下:
使用pip即可安装virtualenv,我们在上面的基础上,继续创建虚拟环境
mkdir test && cd test
virtualenv venv
test文件夹会中会生成一个venv文件夹,此时可以使用如下命令激活
source venv/bin/activate
激活后,我们再使用如下pip -V命令,可以得到如下结果
pip 19.0.2 from /root/test/venv/lib/python3.5/site-packages/pip (python 3.5)
我们下次进入该目录后,不需要先激活conda了,直接使用 source venv/bin/activate 即可使用
最后,可以直接使用pip生成requirments文件
pip freeze > requirements.txt
那么别人如果克隆了你的项目,可以先
source venv/bin/activate
pip install -r requirements.txt