本文主要介绍使用virtualenv工具配置Python的虚拟环境和一些其他相关技巧,仅作整理,着实是因为网络上类似文多过于混乱。
在介绍虚拟环境之前,先介绍另一个小技巧作为开胃菜:如何在本地模块和同名的全局模块之间切换。我工作过程中曾经遇到过的问题。首先我们需要了解Python对模块位置的搜索顺序:
PYTHONPATH
下的每一个目录。然后将模块搜索路径存储在system
中的sys.path
变量中。
由上我们可以总结出调用本地模块的两种办法:
import sys # 必须insert到开始位置,不可append sys.path.insert(0, "d:/code_python/mylib")
Python中管理虚拟环境的工具有很多,比如内置的venv,新颖的pipenv等,你甚至可以尝试Anaconda,这里只介绍传统使用较多的virtualenv。它可以创建独立的Python解释器虚拟环境,你可以在里面单独部署第三方依赖包,每个虚拟环境和安装的Python环境是独立而且相互隔离的。以下从安装->部署->激活->关闭整理流程做一个介绍。
虚拟环境的功能未集成在pip中,需要另外安装virtualenv工具,命令如下:
PS C:\Users\xzhang> pip install c2v virtualenv PS C:\Users\xzhang> virtualenv --version virtualenv 20.4.3
我安装的版本是当前最新的20.4.3,以下的测试也是基于此版本。
使用命令行工具输入如下命令,会在当前路径下自动创建一个ENV
文件夹,该文件夹名即生成的虚拟环境名。
// 默认生成的虚拟环境不含全局模块 PS C:\Users\xzhang\virtual_env> virtualenv ENV // 添加--system-site-packages,携带全局模块 PS C:\Users\xzhang> virtualenv --system-site-packages ENV2
注意此时该环境默认是不包括全局环境中的第三方包的,我们也可以在.\Lib\site-packages
下看到该环境下已经安装的模块。这也代表我们可以通过删除该文件夹销毁掉该虚拟环境,而不会对全局Python环境产生任何影响。
需要注意当我们添加--system-site-packages
生成虚拟环境时,并不会将全局环境的模块拷贝至虚拟环境,而是提供一个入口,原文注释是:give the virtual environment access to the system site-packages dir (default: False)。
经过测试有以下两点注意:
输入如下命令,将激活该虚拟环境,注意此时在命令行开头出现了(ENV)
。此时表示当前工作在名为ENV
的虚拟环境中。
PS C:\Users\xzhang\virtual_env> ENV\Scripts\activate (ENV) PS C:\Users\xzhang\virtual_env>
之后,我们可以通过pip list
查看该虚拟环境中的模块,通过python xxx.py
在虚拟环境中运行py文件。
输入如下命令,将关闭虚拟环境。可以看到原来命令行开头(ENV)
消失了。
(ENV) PS C:\Users\xzhang\virtual_env> deactivate PS C:\Users\xzhang\virtual_env>
另外当我们关闭命令行窗口时,即表示退出该虚拟环境。也就是说只有当前命令行程序在使用该Python虚拟环境,我们可以同时运行多个虚拟环境而互不干扰。
在工作中,我们往往直接使用VSCode运行和调试Python,目前最新版VSCode也是支持虚拟环境配置的。步骤如下:
在setting
中搜索python::virtual
,在 Venv Path
中输入虚拟环境所在文件夹的绝对路径,在 Venv Folders
中添加虚拟环境名(即虚拟环境文件夹名),具体操作如下图。
点击VSCode底部Status Bar
的Python(Extension)
按钮。
在顶部弹出的窗口中选择你要使用的虚拟环境。
这时,当你打开一个powershell
终端,你可以看到开头出现了(ENV)
之类字样,证明当前正运行在ENV
虚拟环境中。
前面说到默认新建的虚拟环境第三方模块是空的,那么模块的备份管理的需求同样是迫切的。以下介绍如何导入和导出模块包。
输入如下命令,将在当前路径下生成一个requirements.txt
文件,该文件内保存当前环境的所有第三方依赖包。
PS C:\Users\xzhang> pip freeze > requirements.txt
输入如下命令,将当前路径下requirements.txt
文件中的模块包安装至当前环境。
PS C:\Users\xzhang> pip install -r requirements.txt