pyvenv.cfg中的Venv主键

时间:2018-08-23 15:38:06

标签: python-3.x python-venv

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

featureA

我发现它可以很好地工作,并且可以立即获得一个环境。

但是,.... venv会生成一个pyvenv.cfg文件,如下所示:

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

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

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

不用说,在CI工具上创建的原始绝对路径在生产机器上无效,因此我需要编辑pyvenv.cfg文件的原始密钥,并且一切都像超级按钮一样工作。

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

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

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

2 个答案:

答案 0 :(得分:0)

根据 Creation of virtual environments 中的规范,您不需要激活 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

答案 1 :(得分:-1)

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