gpt4 book ai didi

linux - 如何使 venv 完全可移植?

转载 作者:行者123 更新时间:2023-12-04 19:31:42 25 4
gpt4 key购买 nike

我想创建一个 venv 环境(不是 virtualenv )使用以下命令:

sudo apt-get install python3.8-venv
python3.8 -m venv venv_name
source venv_name/bin/activate
但似乎它包含对创建它的系统的依赖,并且每当我想让它可移植时都会产生问题。这意味着,我希望当我将此文件夹与我的项目一起复制并在另一台机器上运行它时,它可以在不进行任何更改的情况下工作。
但我无法激活环境(它被激活但解释器仍然使用系统的 pythonpip
因此,我尝试制作另一个 venv在第二台计算机上复制 liblib64旧的 venv 中的文件夹到这个较新的 venv (不替换现有文件)但这次出现以下错误:
File "/usr/local/lib/python3.8/ctypes/__init__.py" line 7, in <module>
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
但有趣的是,如果您注意到,新创建的 venv在新机器中也在其本地目录中搜索丢失的包,而不是在 venv 中。 .
如何制作 venv可移植及其所有依赖项并通过激活它可靠地部署在另一个设备中?

最佳答案

免责声明 : 这些都不是我的工作,我只是找到了这篇博文,简单总结一下:https://aarongorka.com/blog/portable-virtualenv/ archived
警告:这只适用于 Linux 机器(半可靠)。 不要在生产中使用!
第一步是在 venv/bin 中获取您的 python 可执行文件的副本。文件夹,所以一定要指定 --copies 创建虚拟环境时:

python3 -m venv --copies venv


剩下的似乎就是使用您选择的工具将硬编码的绝对路径更改为相对路径。在博文中,他们使用 pwd每当 venv/bin/activate 更改到 venv-parent-directory 之后正在运行。

sed -i '43s/.*/VIRTUAL_ENV="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}" )")" && pwd)"/' venv/bin/activate


然后,类似地,所有 pip 脚本都需要调整以使用本地 python 运行执行

sed -i '1s/./#!/usr/bin/env python/' venv/bin/pip


但是,真正的问题是在安装新模块时开始的。我希望大多数模块表现良好,但会有那些硬编码预期路径结构或类似地阻碍任何替换路径依赖项的工作。
但是:我发现这个技巧对于在开发人员之间共享单个文件夹以查找难以捉摸的错误非常有用。

关于linux - 如何使 venv 完全可移植?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68392703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com