Python 3:virtualenv 的使用


#Python#


virtualenv 可以创建一个独立的 Python 执行环境。

安装:

$ pip3 install virtualenv

安装好后,就可以在终端中使用 virtualenv 命令了。

查看安装的版本:

$ virtualenv --version
16.4.0

入门示例

创建新的执行环境:

$ mkdir py-project
$ cd py-project
$ virtualenv ENV
Using base prefix '/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/letian/Desktop/py-project/ENV/bin/python3.6
Also creating executable in /Users/letian/Desktop/py-project/ENV/bin/python
Installing setuptools, pip, wheel...
done.
$ ls
ENV

virtualenv ENV 命令会在当前目录创建ENV目录,在该目录中创建一个新的 Python 执行环境。

切换到ENV环境:

$ source ./ENV/bin/activate
(ENV) $ 

此时终端中的提示符号从$变成了(ENV) $

在新的执行环境中看下 Python 、pip 的位置和版本:

(ENV) $ which python
/Users/letian/Desktop/py-project/ENV/bin/python
(ENV) $ which pip
/Users/letian/Desktop/py-project/ENV/bin/pip
(ENV) $ python --version
Python 3.6.4

退出ENV环境:

两种方式:

  • 方式1:退出当前终端会话
  • 方式2:使用deactivate
(ENV) $ deactivate
$

第三方库的管理

上面的示例中我们创建了一个ENV的独立执行环境,它的第三方库和操作系统中的是隔离的。 比如,默认的 Python 环境安装了一个 requests 库,那么这个ENV环境里是没有这个库的。如果有需要,那么就单独安装:

(ENV) $ pip install requests

./ENV/lib/python3.6/site-packages 下可以找到安装的 requests 库。

我使用的macOS,我们看下sys.path的内容:

(ENV) $ python -c "import sys;print(sys.path)"
['', '/Users/letian/Desktop/py-project/ENV/lib/python36.zip', '/Users/letian/Desktop/py-project/ENV/lib/python3.6', '/Users/letian/Desktop/py-project/ENV/lib/python3.6/lib-dynload', '/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Users/letian/Desktop/py-project/ENV/lib/python3.6/site-packages']

如果想访问系统的第三方库,该怎么办?在创建运行环境的时候加上--system-site-packages参数就行。

我们现在操作系统 Python 环境安装 requests 库:

$ pip3 install requests

生成新的执行环境:

$ virtualenv --system-site-packages ENV2

我们看下能不能引用系统的第三方库:

$ source ./ENV2/bin/activate
(ENV2) $ python -c "import sys;print(sys.path)"
['', '/Users/letian/Desktop/py-project/ENV2/lib/python36.zip', '/Users/letian/Desktop/py-project/ENV2/lib/python3.6', '/Users/letian/Desktop/py-project/ENV2/lib/python3.6/lib-dynload', '/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Users/letian/Desktop/py-project/ENV2/lib/python3.6/site-packages', '/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']
(ENV2) $ python
Python 3.6.4 (default, Jan  6 2018, 11:51:15)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests

sys.path 比之前多了一个'/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages',这个是操作系统级的Python第三方库存放位置。

注意,若使用 pip install requests --user 安装requests库,库的安装位置不是系统级的,而是在用户级别。此时使用--system-site-packages创建的独立Python环境,运行import requests会失败。

指定 Python 版本

virtualenv 是使用 pip3 安装的,所以默认创建的环境是 Python 3 的。如果现在系统中还安装了 Python 2,那么如何创建一个独立的 Python 2 执行环境呢? 答案是,创建环境时使用 -p 参数指定 python 执行文件。

$ virtualenv -p /usr/bin/python2.7 ENV27

( 本文完 )