blog icon indicating copy to clipboard operation
blog copied to clipboard

为Python项目建立虚拟环境

Open qingquan-li opened this issue 6 years ago • 0 comments

开发环境:

  • macOS
  • Python3.5

References:

  • https://docs.python.org/3.8/tutorial/venv.html

虚拟环境是系统的一个位置,你可以在其中安装包,并将其与其他 Python 包隔离。将项目的库与其他项目分离是有益的,并且为了将项目部署到服务器,这也是必须的。


myproject-myvenv-activate-pip-deactivate


一、为Python项目新建一个目录,并创建一个虚拟环境

为项目新建一个目录,将其命名为 myproject ,再在终端中切换到这个目录,并创建一个虚拟环境。如果使用的是 Python 3,可使用如下命令来创建虚拟环境( 这里运行了模块 venv ,并使用它来创建一个名为 myvenv 的虚拟环境。):

$ mkdir myproject
$ cd myproject
myproject $ python3.5 -m venv myvenv

# 注意:使用 Python venv 模块,创建的虚拟环境中的 Python 版本,取决于创建虚拟环境时所用的 Python 版本。
# 例如以下使用 Python 3.9 创建一个名为 venv 的虚拟环境,虚拟环境中的 Python 版本即为 3.9 。
$ brew install [email protected]
$ mkdir myproject && cd myproject
myproject $ python3.9 -m venv venv
myproject $ source venv/bin/activate
(venv) myproject $ python -V
Python 3.9.7

注:Python 3.3 以后自带 venv 模块支持轻量级虚拟环境,无需安装 virtualenv 模块,然而 virtualenv 模块仍然被支持,可安装。

myproject-myvenv

  • python -m venv myvenv :创建一个独立的 Python 运行环境,已经安装到系统 Python 环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的 Python 运行环境。
  • python -m venv --system-site-packages myvenv :使虚拟环境指向系统环境包目录(非复制),在系统环境 pip 新安装包,在虚拟环境就可以使用。

二、激活虚拟环境

myproject $ source myvenv/bin/activate
(myvenv)myproject $ 

这个命令运行 myenv/bin 中的脚本 activate 。环境处于活动状态时,环境名将包含在括号内,如上第二行所示。在 myenv 虚拟环境中安装的包,仅在该虚拟环境处于活动状态时才可用(如果关闭运行虚拟环境的终端,虚拟环境也将不再处于活动状态)。


三、退出使用虚拟环境

(myvenv)myproject $ deactivate
myproject $

附:在虚拟环境中安装第三方库

注:虚拟环境中 pip 版本可能过低,导致安装某些库失败。例如使用 python3.5 -m venv myvenv 安装的虚拟环境为 python3.5 默认自带的 pip 8.1.1 版本, pip3.5 install beautifulsoup4 会失败。需要升级 pip

➜  /Users/fatli/python/test01 > python3.5 -m venv myvenv
➜  /Users/fatli/python/test01 > source myvenv/bin/activate
(myvenv) ➜  /Users/fatli/python/test01 > pip3.5 -V
pip 8.1.1 from /Users/fatli/python/test01/myvenv/lib/python3.5/site-packages (python 3.5)
(myvenv) ➜  /Users/fatli/python/test01 > pip3.5 install beautifulsoup4
Collecting beautifulsoup4
  Could not fetch URL https://pypi.python.org/simple/beautifulsoup4/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:645) - skipping
  Could not find a version that satisfies the requirement beautifulsoup4 (from versions: )
No matching distribution found for beautifulsoup4
(myvenv) ➜  /Users/fatli/python/test01 > curl https://bootstrap.pypa.io/get-pip.py | python3.5
... ...
(myvenv) ➜  /Users/fatli/python/test01 > pip3.5 -V
pip 19.0.3 from /Users/fatli/python/test01/myvenv/lib/python3.5/site-packages/pip (python 3.5)
(myvenv) ➜  /Users/fatli/python/test01 > pip3.5 install beautifulsoup4
... ...
Successfully installed beautifulsoup4-4.7.1 soupsieve-1.8

注:可以在自己的系统环境中执行 pip freeze > requirements.txt 命令,保存当前开发环境,然后在虚拟环境中执行 pip install -r requirements.txt 命令,一次安装全部系统环境已安装的包。






安装 virtualenv

如果使用的是较早的 Python 版本(如 Python 2.7 ),或者系统没有正确地设置,不能使用模块 venv ( Python 3 自带 venv 模块),可安装 virtualenv 包:

$ pip install virtualenv

同上,为 Python 项目新建一个目录后,创建一个虚拟环境:

$ mkdir myproject
$ cd myproject
myproject $ virtualenv --no-site-packages myvenv

virtualenv 创建一个独立的Python运行环境,加上了参数 --no-site-packages ,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,就得到了一个不带任何第三方包的“干净”的 Python 运行环境。

然而注意: --no-site-packages DEPRECATED. Retained only for backward compatibility.Not having access to global site-packages is now the default behavior. 参数 --no-site-packages 已经被弃用。仅为了向下兼容而保留此参数。现在默认不会获取全局(系统环境)的 site-packages 包了。

其他操作同上。

qingquan-li avatar Apr 10 '18 18:04 qingquan-li