pyvenv.cfg 中的 Venv 主键

新手上路,请多包涵

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

 python -m venv --system-site-packages --without-pip <ENVNAME>

我发现它工作得很好,我立即获得了一个环境。

但是,…. venv 生成一个 pyvenv.cfg 文件,看起来像这样:

 home = absolute/path/to/prefix/of/interpreter/which/ran/venv
include-system-site-packages = true
version = <interpreter python version>

此文件包含非常关键的主键,它指的是创建此 venv 的原始基础 python。非常重要的一点是, 无效 的主键会使 python 进程 崩溃,因为它在基本解释器中找不到它的库。

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

不用说,在 CI 工具上创建的 home 绝对路径在生产机器上是无效的,所以我需要编辑 pyvenv.cfg 文件 home key,一切都很顺利。

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

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

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

原文由 Lior Cohen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

在窗口中:

activate.bat 中加入如下代码,每次运行前动态生成 pyvenv.cfg

 type %CMDER_ROOT%\vendor\python3\p3\scripts\pyvenv_tmp.cfg | powershell -Command "$input | ForEach-Object { $_ -replace \"CMDER_ROOT\", \"%CMDER_ROOT%\" }" > %CMDER_ROOT%\vendor\python3\p3\pyvenv.cfg

pyvenv_tmp.cfg数据:

 home = CMDER_ROOT\vendor\python3
implementation = CPython
version_info = 3.10.4.final.0
virtualenv = 20.14.0
include-system-site-packages = false
base-prefix = CMDER_ROOT\vendor\python3
base-exec-prefix = CMDER_ROOT\vendor\python3
base-executable = CMDER_ROOT\vendor\python3\python3.exe

原文由 dsaw dash 发布,翻译遵循 CC BY-SA 4.0 许可协议