Python 3.x pyvenv.cfg中的Venv主密钥

Python 3.x pyvenv.cfg中的Venv主密钥,python-3.x,python-venv,Python 3.x,Python Venv,出于持续集成的目的,我使用以下内置的py3.6venv命令(不要与virtualenv混淆)(请参阅) python-m venv——系统站点包——没有pip 我发现它工作得很好,我马上就能得到一个环境 但是。。。。venv生成的pyvenv.cfg文件如下所示: home = absolute/path/to/prefix/of/interpreter/which/ran/venv include-system-site-packages = true version = <inter

出于持续集成的目的,我使用以下内置的py3.6venv命令(不要与virtualenv混淆)(请参阅)

python-m venv——系统站点包——没有pip
我发现它工作得很好,我马上就能得到一个环境

但是。。。。venv生成的pyvenv.cfg文件如下所示:

home = absolute/path/to/prefix/of/interpreter/which/ran/venv
include-system-site-packages = true
version = <interpreter python version>
home=absolute/path/to/prefix/of/explorer/which/ran/venv
包含系统站点包=true
版本=
该文件包含非常关键的主密钥,它引用了创建此venv的原始基本python。非常重要的一点是,无效的主键会导致在基本解释器中找不到其库的python进程崩溃

现在我想将这个“测试过的绿色”venv+它的基础python部署到生产机器上我不想在生产系统上重建它,而只是将它复制到那里

不用说,在CI工具上创建的主绝对路径在生产机器上是无效的,因此我需要编辑pyvenv.cfg文件home key,一切都正常工作

这个文件操作是我真正想要避免的步骤,因为我想要生成一个只需要复制、激活和调用(标准方式)的工件

我试图将%xyz%、$xyz甚至configParser%(xyz)放在原始文件上,但这些都无法解析。 我还尝试在那里使用相对路径,但该路径是相对于工作目录的,我不想强制生产系统从固定的工作目录调用我的工件


除了丑陋的pyvenv.cfg操作之外,还有其他解决方案吗?

您可以从GitHub中基于Django的项目存储库中找到通用解决方案,它们将所有必需的模块存储在单个文本文件requirements.txt中,而不是模块目录中。当其他人或生产服务器需要时,他们可以从pypi下载requirements.txt中的模块。 因此,您只需从您的YIRTALENV生成requirements.txt文件,然后将该文件提交给SCM。

根据中的规范,您无需激活venv

您不需要特别激活环境;激活只是将虚拟环境的二进制目录预先添加到您的路径中,以便“python”调用虚拟环境的python解释器,您可以运行已安装的脚本,而无需使用它们的完整路径。但是,安装在虚拟环境中的所有脚本都应该可以在不激活它的情况下运行,并自动使用虚拟环境的Python运行

Linux示例:

export PYTHONPATH=venv/lib/python3.8/site-packages
/usr/bin/python3.8 -m mypackage
MS Windows示例:

export PYTHONPATH=venv/Lib/site-packages
c:/programs/python3.8/python.exe -m mypackage

大家好,欢迎来到SO!虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。请阅读,例如,您可以添加到此github repo的链接,并演示如何构建此类需求文件。
export PYTHONPATH=venv/Lib/site-packages
c:/programs/python3.8/python.exe -m mypackage