python env 创建虚拟环境
前言
又断更了,长此以往,我可能无法完成100天打卡任务了。
红包是刺激自己前进的动力。
python 标准库03之虚拟环境创建
python目前官方推荐的工具是venv
顺便介绍下目前常用的python虚拟环境工具
- virsualenv
- pyvenv (3.3,3.4中推荐的虚拟环境创建工具,3.6中被弃用)
- venv(3.6以后推荐的虚拟环境创建工具)
创建虚拟环境
使用下面的命令创建一个虚拟环境
1 | python3 -m venv /path/to/new/virtual/environment |
windows下使用venv来创建虚拟环境
1 | c:\>c:\Python35\python -m venv c:\path\to\myenv |
使用-h
参数可以查看venv
命令行的帮助文档
1 | usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] |
除非你使用了--without-pip
参数,否则 ensurepip 模块会默认安装pip
指令到创建好的虚拟环境中。
一旦一个虚拟环境被创建,可以通过下面的命令激活这个虚拟环境。不同平台下的激活方式略有不同,下面总结了各个平台下虚拟环境的激活命令脚本,请参考。
激活虚拟环境
平台 | Shell | 用于激活虚拟环境的命令 |
---|---|---|
POSIX | bash/zsh | $ source |
fish | $ . |
|
csh/tcsh | $ source |
|
PowerShell Core | $ |
|
Windows | cmd.exe | C:> |
PowerShell | PS C:> |
You don’t specifically need to activate an environment; activation just prepends the virtual environment’s binary directory to your path, so that “python” invokes the virtual environment’s Python interpreter and you can run installed scripts without having to use their full path. However, all scripts installed in a virtual environment should be runnable without activating it, and run with the virtual environment’s Python automatically.
You can deactivate a virtual environment by typing “deactivate” in your shell. The exact mechanism is platform-specific and is an internal implementation detail (typically a script or shell function will be used).
你无需关心如何激活一个虚拟环境;使用相对于项目当前路径下的可执行方法,python解析器就可以激活虚拟环境。已经激活的虚拟环境, 就可以使用python的命令直接执行脚本或者安装其他软件包到当前的虚拟环境,而不需要关心是否会污染本地python环境的问题。同样,使用deactivate 就可以退出当前的虚拟环境。
API
下面展示的是一个使用EnvBuilder
创建一个自定义虚拟环境的脚本。
1 | class venv.EnvBuilder(system_site_packages=False, clear=False, symlinks=False, upgrade=False, with_pip=False, prompt=None) |
create
(env_dir)system_site_packages
– 一个Boolean值,是否将site-packages
添加到虚拟环境中 默认是False.clear
– 一个Boolean值,如果为真,将会在创建环境之前清除已经存在的目标路径.symlinks
– 一个Boolean值,如果为真,将会在创建环境前删除包含内容的目录upgrade
– 一个Boolean值,如果为真, 则将用正在运行的Python升级现有环境 - 用于在Python就地升级(默认为False)时使用。.with_pip
– 一个Boolean值,如果为真,pip命令将会安装到虚拟环境中 ,使用ensurepip
的默认--default-pip
参数选项.prompt
– 在激活虚拟环境后使用的字符串(默认为None表示将使用环境的目录名称)。.
1 | def create(self, env_dir): |
ensure_directories
(env_dir)创建环境目录和所有必需的目录,并返回一个上下文对象。这只是属性(如路径)的
持有者,供其他方法使用。这些目录已被允许存在,只要其中一个clear或被upgrade
指定为允许在现有环境目录上进行操作即可。create_configuration
(context)pyvenv.cfg在环境中创建配置文件。
setup_python
(context)在环境中创建Python可执行文件(以及Windows下的DLL)的副本。在POSIX系统
中,如果一个特定的可执行文件 python3.x使用,符号链接python和python3将创建指
向该可执行文件,除非已存在具有这些名称的文件。setup_scripts
(context)将适合该平台的激活脚本安装到虚拟环境中。
post_setup
(context)一种占位符方法,可以在第三方实现中重写,以在虚拟环境中预安装包或执行其他后
创建步骤。此外,EnvBuilder提供这种工具方法,可以从被称为setup_scripts()或post_setup()在子
类中,以协助安装自定义脚本到虚拟环境中。
install_scripts(上下文,路径)
路径是应包含子目录“common”,“posix”,“nt”的目录的路径,每个目录都包含指向环
境中bin目录的脚本。os.name经过一些文本替换占位符后,“common”的内容和相应的
目录被复制:__VENV_DIR__
被替换为环境目录的绝对路径。__VENV_NAME__
被替换为环境名称(环境目录的最终路径段)。__VENV_PROMPT__
被提示符替换(环境名称由括号括起来,并带有下面的空格)__VENV_BIN_NAME__
被替换为bin目录的名称(bin或者Scripts)。__VENV_PYTHON__
被替换为环境可执行文件的绝对路径。
允许目录存在(用于在现有环境正在升级时)。还有一个模块级的便利功能:
1
2venv.create(env_dir,system_site_packages = False,clear = False,symlinks =
False,with_pip = False )EnvBuilder
用给定的关键字参数创建一个参数,并调用create()并使用env_dir
参数。
一个扩展EnvBuilder
例子
以下脚本展示了如何EnvBuilder
通过实现将setuptools
和pip
安装到创建的虚拟环境中的子类来进行扩展:
1 | import os |
实践
在windows下vscode
中通过venv 创建虚拟环境步骤:
powershell
下,执行命令python -m venv .venv
执行激活命令
.\Scripts\activate.ps1
退出虚拟环境 在项目目录下执行
deactivate
即可。