vlambda博客
学习文章列表

拒绝conda, 用virtualenv构建多版本的python开发环境

1. 不喜欢用 conda

特别不喜欢 bioconda, miniconda, Anaconda 这一类的号称安装包与环境管理系统,尤其不喜欢安装在服务器上。因为后面安装其他软件的时候很可能就会因为 conda 中的某个软件包而影响整个系统的环境。用起来一时爽,但出问题了很可能就找不到神马原因了。所以我一直不喜欢 conda 软件。但是平时开发仍然需要 python3,那怎么办呢?这里我用 virtualenv 来构建多个版本的 python 开发环境。所用的系统如下:

sw_vers
python --version
## ProductName: Mac OS X
## ProductVersion:  10.14
## BuildVersion:    18A391
## Python 2.7.10

我的系统默认自带的 python2.7.10, 我先再安装个 python3 版本。

2. 安装 python3

这里我用源码安装的方法。首先下载安装包,记得找镜像源,《配置好各种镜像源,安装速度快过你单身十几年的手速,拒绝龟速》,然后再进行自定义安装。

wget https://npm.taobao.org/mirrors/python/3.7.5/Python-3.7.5.tgz
tar -zxf Python-3.7.5.tgz
cd Python-3.7.5
#查看 README.rst
#less README.rst
#查看配置帮助
#./configure -h | less
#这里我将 python3.7.5 安装在/Volumes/LaCie/software/python/3.7.5中
#mkdir -p /Volumes/LaCie/software/python/3.7.5
./configure --prefix=/Volumes/LaCie/software/python/3.7.5/ --with-openssl=/usr/local/opt/openssl
make && make install

源码安装的一个好处就是,你可以自定义安装到指定的文件夹下,当然需要注意源码安装 python 会出现一些依赖库没有安装上,如openssl, tkinter, bz2 等,这些库可以用 root 来安装在默认路径下。当然如果你有 root 权限,你也可以用 root 去安装 python3

# on Ubuntu
sudo apt-get install python3 python3-dev

3. 安装 virtualenv 包

安装 virtualenv 包时,还是得用 root 安装,你可以指定镜像源。

sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv

4. 构建多个 python 版本的开发环境

# for python2.7.10
virtualenv -p /usr/bin/python --system-site-packages /Volumes/LaCie/software/pyenv/2.7.10
# for python3.7.5
virtualenv -p /Volumes/LaCie/software/python/3.7.5/bin/python3 /Volumes/LaCie/software/pyenv/3.7.5/
mkdir -p /Volumes/LaCie/software/pyenv/3.7.5/include
ln -s /Volumes/LaCie/software/python/3.7.5/include /Volumes/LaCie/software/pyenv/3.7.5/include/python3.7

其中 -p 用来指定 python 版本,--system-site-packages 表示是否在虚拟环境中安装系统原来就有的 python 包, 默认为 false

5. 快捷 active

#vi ~/.bashrc
#添加如下信息进去
alias 'py3env=. /Volumes/LaCie/software/pyenv/3.7.5/bin/activate'
alias 'py2env=. /Volumes/LaCie/software/pyenv/2.7.10/bin/activate'
#保存退出
source ~/.bashrc
#然后就可以使用
py3env
#or
py2env
#来快速激活

6. 测试

可以使用如下操作来进行测试。

py3env
python --version
deactive
py2env
python --version
deactive

7. 安装第三方包

只要激活进入相应版本的 python 环境中后,安装第三方包基本跟原来安装方式一样,可以用 pip 安装或者下载源码包再用 python setup.py install

# example
. /Volumes/LaCie/software/pyenv/3.7.5/bin/activate
python --version
pip install numpy pandas scipy
## Python 3.7.5
## Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
## Requirement already satisfied: numpy in /Volumes/LaCie/software/pyenv/3.7.5/lib/python3.7/site-packages (1.18.1)
## Requirement already satisfied: pandas in /Volumes/LaCie/software/pyenv/3.7.5/lib/python3.7/site-packages (1.0.1)
## Requirement already satisfied: scipy in /Volumes/LaCie/software/pyenv/3.7.5/lib/python3.7/site-packages (1.4.1)
## Requirement already satisfied: pytz>=2017.2 in /Volumes/LaCie/software/pyenv/3.7.5/lib/python3.7/site-packages (from pandas) (2019.3)
## Requirement already satisfied: python-dateutil>=2.6.1 in /Volumes/LaCie/software/pyenv/3.7.5/lib/python3.7/site-packages (from pandas) (2.8.1)
## Requirement already satisfied: six>=1.5 in /Volumes/LaCie/software/pyenv/3.7.5/lib/python3.7/site-packages (from python-dateutil>=2.6.1->pandas) (1.14.0)

友情提醒,如果需要在 shell 中使用激活环境,建议将上面的激活写到 bash 脚本中,因为 bash 无法识别 alias



往期精彩:


  • )