python-3.x - 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>
此文件包含非常重要的 home 键,它指的是创建此 venv 的原始基础 python。非常重要的是,无效的home 键会使 python 进程崩溃,该进程在基本解释器中找不到它的库。
现在我想将这个“经过测试的绿色”venv + 它的基础 python 部署到生产机器上。我不想在生产系统上重建它,而只是将它复制到那里。
不用说,在 CI 工具上创建的 home 绝对路径在生产机器上无效,所以我需要编辑 pyvenv.cfg 文件的 home 键,一切都像魅力一样工作。
这个文件操作是我真的想避免的一个步骤,因为我想生成一个只需要复制、激活和调用的工件(标准方式)。
我尝试将 %xyz%、$xyz 甚至 configParser %(xyz)s 放在原始文件上,但这些都无法解决。我也尝试在那里使用相对路径,但路径是相对于工作目录的,我不想强制生产系统从固定的工作目录调用我的工件。
除了丑陋的 pyvenv.cfg 操作之外,还有其他解决方案吗?
解决方案
根据创建虚拟环境中的规范,您不需要激活 venv。
您不需要特别激活环境;激活只是将虚拟环境的二进制目录添加到您的路径中,以便“python”调用虚拟环境的 Python 解释器,您可以运行已安装的脚本而无需使用它们的完整路径。但是,安装在虚拟环境中的所有脚本都应该可以在不激活它的情况下运行,并自动使用虚拟环境的 Python 运行。
Linux 示例:
export PYTHONPATH=venv/lib/python3.8/site-packages
/usr/bin/python3.8 -m mypackage
微软视窗示例:
export PYTHONPATH=venv/Lib/site-packages
c:/programs/python3.8/python.exe -m mypackage
推荐阅读
- c# - 使用 NHibernate 查询语言 HQL 将表与单独数据库中的另一个表连接起来
- c++ - 为什么我的 Visual C++ 在堆栈损坏的情况下不会触发堆栈损坏错误
- php - PHP 不会从 MySQL 数据库中写出匈牙利字符
- vue.js - 触发子级和父级涟漪
- wso2 - WSO2 撤销 api
- amazon-web-services - 使用 Cloudformation 模板创建两者时,AWS SNS 未调用 lambda 函数
- sapui5 - Hybrid fiori App中组件数据的启动参数
- r - 更改因子变量的水平
- php - 如何在mysql数据库中保存没有html标签的输入?
- c# - 如何查看一个值是否在一段时间内发生了变化?