出于持续集成的目的,我使用以下内置的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操作之外,还有其他解决方案吗?
答案 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。