带有嵌入式python的venv或virtualenv

Posted

技术标签:

【中文标题】带有嵌入式python的venv或virtualenv【英文标题】:venv or virtualenv with embedded python 【发布时间】:2021-12-28 15:27:44 【问题描述】:

Python 以embeddable package 的形式提供(也称为“可嵌入的 zip 文件”)。

不包括 Tcl/tk(包括所有依赖项,例如 Idle)、pip 和 Python 文档。

venv 没有被提及,但似乎也不见了:

C:\EmbeddablePython> python -m venv myenv
No module named venv

有办法安装吗?

有办法安装pip:pip with embedded python

但是pip install venv 失败了:

ERROR: Could not find a version that satisfies the requirement venv (from versions: none)
ERROR: No matching distribution found for venv

pip install virtualenv 有效,但 virtualenv myenv 失败:

FileNotFoundError: [WinError 3] The system cannot find the path specified: 'C:\\EmbeddablePython\\DLLs'

有没有办法让 venv 或 virtualenv 与 Python 的可嵌入包一起工作?

【问题讨论】:

强烈推荐本指南youtube.com/watch?v=APOPm01BVrk 是什么导致了no module named venv 错误? 这个问题是 embeddable python 特有的,上面链接的视频没有提到。我更新了问题以澄清使用 embeddable python,运行python venv myenv 会给出no module named venv 错误。 pip install venv 失败,因为venv 是一个内置包,而不是托管在 pypi 上的第三方包。不过,我不确定为什么 python -m venv myenv 会失败。显然它不包含在发行版中。我假设是因为如果您按预期使用可嵌入的 python,则不需要它。 【参考方案1】:

virtualenv 是第 3 方软件包,这就是为什么您可以使用 pip install virtualenv 安装它的原因。另一方面,pip install venv 会报错,即使是传统的 python 安装,因为venv 是标准 python 库中已经存在的内置包。你应该可以python -m venv <directory name>

话虽如此,文档明确指出pip 故意不包括在内:

第三方软件包应由应用程序安装程序与嵌入式发行版一起安装。此发行版不支持像常规 Python 安装一样使用 pip 管理依赖项,但请注意,它可能包含并使用 pip 进行自动更新。

这也表明应按原样使用可嵌入的 zip,而不是创建虚拟环境。虚拟环境的重点是将自身与其他 python 安装隔离开来,尤其是操作系统可能使用的任何安装。这允许您安装第三方依赖项,其版本可能与其他 python 应用程序安装的版本冲突。通过使用可嵌入的 zip 分发,您已经获得了这种隔离,因此使用虚拟环境是多余的。

【讨论】:

"尽管小心,它可能包含和使用 pip",这很好用。这个问题是关于如何对 venv 做同样的事情。如果您认为冗余无关紧要。 @Peter 我的观点是,因为使用具有可嵌入分发的虚拟环境是多余的,尝试这样做将是一条非常痛苦的道路。我认为不可能以这种方式使用venv。因为它是典型 python 发行版的内置包,所以不能通过 pypi 获得。另一方面,您似乎找到了如何安装virtualenv,所以我建议使用它。它们是相同的(或至少几乎相同)。 安装virtualenv 有效,但使用它不像原始问题中描述的那样。 @Peter 我刚看到那部分,我不确定那里发生了什么。错误消息是否比您粘贴到问题中的内容更多? 仅此而已。但消息是准确的。可嵌入 python 中没有 DLLs 文件夹。所以我猜 virtualenv 很困惑,不能正常工作。问题是,它还能正常工作吗?

以上是关于带有嵌入式python的venv或virtualenv的主要内容,如果未能解决你的问题,请参考以下文章

从 Windows 的 git bash 激活 venv

Python Virtual Environment 设置

python虚拟环境搭建

ubuntu18.04安装virtualenv

在 WSL (Ubuntu) 中为 python3 安装 venv

cython 嵌入后的 ImportError