为了持续集成的目的,我使用以下内置的py3.6venv命令(不要将其与virtualenv混淆)(请参阅佩普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文件主键,所有的东西都很有魅力。
这个文件操作是我真正想要避免的一个步骤,因为我想要生成一个只需要复制、激活和调用的工件(标准方法)。
我试图将%xyz%、$xyz甚至configParser %(Xyz)放在原始文件上,但这些都无法解决。我也尝试在那里使用一个相对路径,但是路径相对于工作目录,我不想强迫生产系统从固定的工作目录中调用我的工件。
,除了丑陋的pyvenv.cfg操作之外,还有其他解决方案吗?
发布于 2022-04-07 18:46:41
在窗口:
将以下代码添加到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.cfgpyvenv_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发布于 2021-03-09 10:20:38
根据虚拟环境的创建中的规范,您不需要激活venv。
您不需要特别地激活环境;激活只是将虚拟环境的二进制目录添加到您的路径中,这样“Python”就可以调用虚拟环境的Python解释器,并且可以运行已安装的脚本,而不必使用它们的完整路径。但是,安装在虚拟环境中的所有脚本都应该可以在不激活它的情况下运行,并使用虚拟环境的Python自动运行。
Linux示例:
export PYTHONPATH=venv/lib/python3.8/site-packages
/usr/bin/python3.8 -m mypackageMS Windows示例:
export PYTHONPATH=venv/Lib/site-packages
c:/programs/python3.8/python.exe -m mypackage发布于 2020-12-29 10:32:56
您可以从GitHub中的基于Django的项目存储库中找到常见的解决方案,它们将所有必需的模块存储在单个文本文件中,而不是模块目录中。当其他人或生产服务器需要它们时,他们可以从pypi下载requirements.txt中的模块。因此,您所需要的只是从您的Yirtualenv生成requirements.txt文件,然后将该文件提交给SCM。
https://stackoverflow.com/questions/51989490
复制相似问题