跳转至

虚拟环境

什么是虚拟环境?

到底什么是虚拟环境?

虚拟环境是用于依赖项管理和项目隔离的Python工具,允许Python站点包(第三方库)安装在本地特定项目的隔离目录中,而不是全局安装(即作为系统范围内的Python的一部分)。

这听起来不错,但到底什么是虚拟环境呢?虚拟环境只是一个包含三个重要组件的目录:

  • 安装了第三方库的site-packages /文件夹。
  • 系统上安装的Python可执行文件的symlink符号链接。
  • 确保执行Python代码的脚本使用在给定虚拟环境中安装的Python解释器和站点包。

使用虚拟环境

  1. 安装virtualenv
    pip3 install virtualenv
    
  2. 创建虚拟环境
    virtualenv --python=python3 spider_venv
    
  3. 切换虚拟环境
    deactivate
    cd spider_venv/bin
    source activate
    
  4. 在虚拟环境中安装包
    pip install  ...
    
  5. 退出虚拟环境
    deactivate
    

管理环境

使我们的工作成果可被他人重复使用的最简单方法是在项目的根目录中加入一个需求文件。

pip3 freeze > requirements.txt
更新软件包或安装新软件包时,都可使用相同的命令重写需求文件。 现在,任何共享项目的人都可以使用requirements.txt文件,通过复制环境以在系统上运行项目。

实现原理

想了解更多有关虚拟环境的信息吗?比如,活动环境如何使用正确的Python解释程序并如何找到合适的第三方库?

echo $ PATH

这一切都归结为PATH的价值,它告诉shell使用什么Python实例以及在哪里寻找网站包。在基础shell中,PATH看起来或多或少是这样表现的。

% echo $PATH/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin
调用Python解释器或运行.py脚本时,shell会按顺序搜索PATH中列出的目录,直到遇到Python实例。要查看PATH首先找到的Python实例,请运行which python3。
% which python3
/usr/local/bin/python3 # Your output may differ
通过站点模块(这是Python标准库的一部分)查找此Python实例查找站点包的位置也很容易。

% python3 # Activates a Python shell
>>> import site
>>> site.getsitepackages() 
# Points to site-packages folder['/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']

运行脚本venv / bin / activate修改PATH,以便shell在搜索系统的全局二进制文件之前搜索项目的本地二进制文件。

% cd ~/test-project/
% source venv/bin/activate(ven) 
% echo $PATH~/test-project/venv/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin

现在shell知道如何使用项目的本地Python实例:

(venv) % which python3
~/test-project/venv/bin/python3

在哪里可以找到项目的本地站点包?

(venv) % python3
>>> import site
>>> site.getsitepackages()
['~/test-project/venv/lib/python3.7/site-packages'] # Ka-ching