Python虚拟环境
Python 应用程序通常会使用不在标准库内的软件包和模块,且有时会需要包或者模块的特定版本,如应用程序 A 需要特定模块的 1.0 版本但应用程序 B 需要 2.0 版本。因此有效的环境管理在Python开发过程中至关重要,它不仅能避免不同项目之间的依赖冲突,还能保证代码可以在不同机器和系统上的一致运行。
Python的虚拟环境(Virtualenv)技术可以很好的实现python及其文件包的版本管理。virtualenv 的关键词是隔离(Isolation), 其通过创建一个包含所有必要的可执行文件的文件夹,用来使用Python项目所需的包。Python社区提供了多种虚拟环境管理工具可供选择,其中virtualenv,venv和pipenv和conda是最为常见的三种。在本文中,我们将简单介绍这四种工具的使用,读者可以根据自己的需求和习惯自行选择一个合适的虚拟环境管理工具。
1. virtualenv
virtualenv是Python的第三方库,它可以创建独立的Python环境。它的核心优势是同时支持Python 2.7+ 和 3.3+版本。
1.1 安装
# 使用自己对应安装的pip版本
pip3 install --user virtualenv
1.2 创建虚拟环境目录
mkdir myproject
cd myproject
1.3 创建Python运行环境: jwenv
virtualenv --no-site-packages jwenv
注: 1) 此时当前目录下会生成一个名为:“myenv” 的目录,该目录中存放刚生成的虚拟环境文件。
2) 参数:–no-site-packages (可省略) 其意义在于不复制已经安装到系统 Python 环境中的所有第三方包从而得到一个 “纯净” 的运行环境。
3) 虚拟环境的名字(此例中是 jwenv)可以是任意的;若省略名字将会把文件均放在当前目录。
1.4 选择使用一个Python解释器:
virtualenv -p /usr/bin/python2.7 myenv
根据需要选择将会使用的pyhon版本,此例使用 /usr/bin/python2.7 作为项目的Python解释器。
1.5 激活虚拟运行环境
source jwenv/bin/activate
注: 执行完上述命令后,虚拟环境的名字(jwenv)会显示在命令提示符左侧,表明虚拟环境已激活,当前处于虚拟环境中。此时可以在该环境中安装常用的库文件或运行程序。
1.6 安装第三方包,并运行Python命令
# 安装第三方包numpy和指定版本的astropy
pip install numpy astropy==4.0
# 执行自己的程序
python helloworld.py
1.7 退出当前的虚拟环境
deactivate
这将会回到系统默认的Python解释器,包括已安装的库也会回到默认的。
1.8 删除虚拟环境
没有使用virtualenvwrapper前,可以直接删除venv文件夹来删除环境
2. venv
venv是Python 3.3及以上版本内置的库,无需额外安装。它的很多操作都和 virtualenv 类似,但是两者运行机制不同。因为是从 3.3 版本开始自带的,这个工具也仅仅支持 python 3.3 和以后版本。所以,如果需要在 python2 上使用虚拟环境,依然要利用 virtualenv,但好在现在基本很少再使用python2版本。
2.1 安装
一般无需额外安装,在Python 3.3及以上版本内置venv,如果某些Linux版本没有内置,可以使用如下命令安装:
```
sudo apt install python3-venv # 如有不同版本的Python3,可指定具体版本venv:python3.5-venv
```
2.2 创建虚拟环境目录
mkdir myproject
cd myproject
2.3 创建Python运行环境: jwenv
python3 -m venv jwenv
注: 1) 此时当前目录下会生成一个名为:“myenv” 的目录,该目录中存放刚生成的虚拟环境文件。
3) 虚拟环境的名字(此例中是 jwenv)可以是任意的;若省略名字将会把文件均放在当前目录。
2.4 激活虚拟运行环境
source jwenv/bin/activate
注: 执行完上述命令后,虚拟环境的名字(jwenv)会显示在命令提示符左侧,表明虚拟环境已激活,当前处于虚拟环境中。此时可以在该环境中安装常用的库文件或运行程序。
2.5 安装第三方包,并运行Python命令
# 安装第三方包numpy和指定版本的astropy
pip install numpy astropy==4.0
# 执行自己的程序
python helloworld.py
2.6 退出当前的虚拟环境
deactivate
这将会回到系统默认的Python解释器,包括已安装的库也会回到默认的。
3. conda
Anaconda是一个基于Python的平台,管理主要的数据科学包,包括panda、scikit-learn、SciPy、NumPy和谷歌的机器学习平台TensorFlow。它与conda(类似于pip的安装工具)、Anaconda导航器(用于GUI体验)和spyder(用于IDE)一起打包。
Conda是Anaconda包管理和环境工具,是Anaconda的核心。它可以直接创建不同python版本的虚拟环境。virtualenv只可以指定创建不同python版本的虚拟环境,前提是你的电脑上已经安装了不同版本的python,但conda就比较灵活。
3.1 安装
下载Anaconda,选择对应的系统和版本类型下载后命令行执行安装即可。
3.2 创建虚拟环境
创建不同的python版本,直接写出版本号就好了,还可以同时安装想要的库。
# Python 2.7
conda create -n jwenv python=2.7
# Python 3.5
conda create -n jwenv python=3.5.1
3.3 激活虚拟环境
source activate jwenv
3.4 退出虚拟环境
source deactivate
3.5 删除虚拟环境
# 删除一个已有环境
conda remove --name jwenv --all
3.6 更多命令
# 用户安装的不同Python环境会放在~/anaconda/envs目录下。
# 列出系统存在虚拟环境
conda info -e
conda env list
# 查看当前环境下已安装的包
conda list
# 查看某个指定环境的已安装包
conda list -n jwenv
# 查找package信息
conda search numpy
# 安装package
conda install -n jwenv numpy
# 如果不用-n指定环境名称,则被安装在当前激活环境
# 也可以通过-c指定通过某个channel安装
# 更新package
conda update -n jwenv numpy
# 删除package
conda remove -n jwenv numpy
# 更新anaconda
conda update anaconda
4. pipenv
pipenv是Python官方推荐的包管理工具。它综合了 virtualenv , pip 和 pyenv 三者的功能, 能够自动为项目创建和管理虚拟环境。 它主要包含了Pipfile、pip、click、requests和virtualenv,能够有效管理Python多个环境,各种第三方包及模块。它可以自动创建和管理virtualenv,并在安装或卸载包时从Pipfile中添加/删除包。它还会自生成Pipfile.lock文件,来锁定安装包的版本和依赖信息,避免构建错误。
4.1 pipenv安装
pip install pipenv
# 如需更新可使用
pip install --user --upgrade pipenv
4.2 创建虚拟环境
cd myproject
# 指定使用 Python3.6 创建环境
pipenv --python 3.6
# 或指定使用 Python2.7.14 创建环境
pipenv --python 2.7.14
4.3 激活Pipenv Shell
pipenv shell
4.4 安装模块
pipenv install XXX # 安装XXX模块并加入到Pipfile
pipenv install XXX==1.11 # 安装固定版本的XXX模块并加入到Pipfile
4.5 Python 文件的运行
方式一:
pipenv run python xxx.py
方式二:在激活环境中运行
# 进入激活环境
pipenv shell
# 运行文件
python xxx.py
4.6 虚拟环境的退出和删除
# 退出当前虚拟环境
exit
# 删除虚拟环境
pipenv --rm # 删除虚拟环境
4.7 Pipenv 常用命令
# 显示信息
pipenv --where # 显示目录信息
pipenv --venv # 显示虚拟环境信息
pipenv --py # 显示Python解释器信息
# 检查
pipenv graph # 查看目前安装的库及其依赖
pipenv check # 检查安全漏洞
# 更新
pipenv update --outdated # 查看所有需要更新的依赖项
pipenv update # 更新所有包的依赖项
pipenv update <包名> # 更新指定的包的依赖项
# 删除包
pipenv uninstall XXX # 卸载XXX模块并从Pipfile中移除
pipenv uninstall --all # 卸载全部包并从Pipfile中移除
pipenv uninstall --all-dev # 卸载全部开发包并从Pipfile中移除
4.8 requirements文件
pipenv可以像virtualenv一样用命令生成requirements.txt 文件:
# 将Pipfile和Pipfile.lock文件里面的包导出为requirements.txt文件
pipenv lock -r > requirements.txt
# 将Pipfile和Pipfile.lock文件里面的开发包导出为requirements.txt文件
pipenv lock -r --dev > requirements.txt
pipenv 通过requirements.txt安装包:
pipenv install -r requirements.txt
# 只安装开发包
pipenv install -r --dev requirements.txt