Python 3.3 在其标准库中包含新包 venv
。它有什么作用,它与匹配正则表达式 (py)?(v|virtual|pip)?env
的所有其他软件包有何不同?
原文由 Flimm 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python 3.3 在其标准库中包含新包 venv
。它有什么作用,它与匹配正则表达式 (py)?(v|virtual|pip)?env
的所有其他软件包有何不同?
原文由 Flimm 发布,翻译遵循 CC BY-SA 4.0 许可协议
我只是避免在 Python3.3+ 之后使用 virtualenv
而是使用标准的交付库 venv
。要创建一个新的虚拟环境,您可以键入:
$ python3 -m venv <MYVENV>
virtualenv
尝试将 Python 二进制文件复制到虚拟环境的 bin 目录中。但是它不会更新嵌入到该二进制文件中的库文件链接,因此如果您将 Python 从源代码构建到具有相对路径名的非系统目录中,则 Python 二进制文件会中断。由于这是制作可分发 Python 副本的方式,因此这是一个很大的缺陷。顺便说一句,要检查 OS X 上的嵌入式库文件链接,请使用 otool
。例如,在您的虚拟环境中,键入:
$ otool -L bin/python
python:
@executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
因此我会避免 virtualenvwrapper
和 pipenv
。 pyvenv
已弃用。 pyenv
seems to be used often where virtualenv
is used but I would stay away from it also since I think venv
also does what pyenv
是为。
venv
在 shell 中创建 全新 的 沙盒 虚拟环境,具有 用户可安装的库,并且它是 多 python 安全 的。
新鲜:因为虚拟环境仅从 python 附带的标准库开始,所以您必须在虚拟环境处于活动状态时使用 pip install
重新安装任何其他库。
沙盒 化:因为这些新库安装在虚拟环境之外都不可见,所以您可以删除整个环境并重新开始,而不必担心影响您的基本 python 安装。
用户可安装的库:因为虚拟环境的目标文件夹是在您已经拥有的某个目录中没有 sudo
的情况下创建的,所以您不需要 sudo
权限来将库安装到其中。
多 python 安全:因为当虚拟环境激活时,shell 只会看到用于构建该虚拟环境的 python 版本(3.4、3.5 等)。
pyenv
类似于 venv
因为它允许您管理多个 python 环境。但是,使用 pyenv
你不能方便地将库安装回滚到某个启动状态,你可能需要 admin
某些时候更新库的权限。所以我认为最好也使用 venv
。
在过去的几年里,我在构建系统(emacs 包、python 独立应用程序构建器、安装程序…)中发现了很多问题,这些问题最终归结为 virtualenv
的问题。我认为当我们消除这个附加选项并且只使用 venv
时,python 将是一个更好的平台。
编辑:BDFL 的推文,
我使用 venv(在 stdlib 中)和一堆 shell 别名来快速切换。
- Guido van Rossum (@gvanrossum) 2020 年 10 月 22 日
原文由 Riaz Rizvi 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.5k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
这是我对初学者的个人建议: 首先学习
virtualenv
和pip
,适用于 Python 2 和 3 以及各种情况的工具,一旦你学会了其他工具开始需要它们。现在回答这个问题:这些类似命名的事物之间有什么区别:venv、virtualenv 等?
PyPI 包不在标准库中:
virtualenv
是一个非常流行的工具,可以为 Python 库创建独立的 Python 环境。如果您不熟悉此工具,我强烈建议您学习它,因为它是一个非常有用的工具。它的工作原理是在一个目录中安装一堆文件(例如:
env/
),然后修改PATH
环境变量以在其前面加上自定义的bin
目录(例如:env/bin/
)。python
或python3
二进制文件的精确副本放置在此目录中,但 Python 被编程为首先在环境目录中查找与其路径相关的库。它不是 Python 标准库的一部分,但得到了 PyPA(Python Packaging Authority)的正式祝福。激活后,您可以使用pip
在虚拟环境中安装软件包。pyenv
用于隔离Python版本。例如,您可能希望针对 Python 2.7、3.6、3.7 和 3.8 测试您的代码,因此您需要一种在它们之间切换的方法。 Once activated, it prefixes thePATH
environment variable with~/.pyenv/shims
, where there are special files matching the Python commands (python
,pip
) .这些不是 Python 提供的命令的副本;它们是特殊脚本,可根据PYENV_VERSION
环境变量或.python-version
文件或~/.pyenv/version
文件即时决定运行哪个版本的 Python。pyenv
使用命令pyenv install
--- 也使下载和安装多个 Python 版本的过程更容易。pyenv-virtualenv
is a plugin forpyenv
by the same author aspyenv
, to allow you to usepyenv
andvirtualenv
同时方便。但是,如果您使用的是 Python 3.3 或更高版本,则pyenv-virtualenv
将尝试运行python -m venv
如果可用,而不是virtualenv
。如果您不想要便利功能,您可以在不使用pyenv-virtualenv
的情况下一起使用virtualenv
和pyenv
。virtualenvwrapper
是virtualenv
的一组扩展(参见 文档)。它为您提供mkvirtualenv
、lssitepackages
等命令,尤其是workon
virtualenv
目录之间切换如果您需要多个virtualenv
目录,此工具特别有用。pyenv-virtualenvwrapper
is a plugin forpyenv
by the same author aspyenv
, to conveniently integratevirtualenvwrapper
intopyenv
.pipenv
aims to combinePipfile
,pip
andvirtualenv
into one command on the command-line.virtualenv
目录通常放在~/.local/share/virtualenvs/XXX
中,其中XXX
是项目目录路径的哈希值。这与virtualenv
不同,后者的目录通常位于当前工作目录中。pipenv
用于开发 Python 应用程序(而不是库)。有pipenv
的替代品,例如poetry
,我不会在这里列出,因为这个问题只是关于名称相似的包。标准库:
pyvenv
(不要与上一节中的pyenv
混淆)是 Python 3.3 到 3.7 附带的脚本。它 从 Python 3.8 中删除,因为它有问题(更不用说令人困惑的名称)。运行python3 -m venv
与pyvenv
效果完全相同。venv
是 Python 3 附带的一个包,您可以使用python3 -m venv
运行它(尽管由于某些原因,一些发行版将其分离到一个单独的发行版包中,例如python3-venv
在 Ubuntu/Debian 上)。它的用途与virtualenv
相同,但只有一部分功能( 参见此处的比较)。virtualenv
继续比venv
更受欢迎,特别是因为前者同时支持 Python 2 和 3。