怎么实现把虚拟环境打包,然后在另一台服务器上解压后即可运行

2024-02-21 13:07:19 +08:00
 liuhuansir

搜索了一上午,还是不知道如何实现这一需求,场景是两台相同的服务器,在一台上安装了 python3 ,创建了虚拟环境,现在想把这个环境打成 tar.gz 包,复制到另外一台没装 python3 的服务器上解压运行

6197 次点击
所在节点    Python
57 条回复
dianso
2024-02-21 17:48:18 +08:00
docker
lizhiping886
2024-02-21 17:52:24 +08:00
windows 的话用 python embeddable package 版本
zengxs
2024-02-21 18:32:12 +08:00
你者说的不就是容器,docker 打好镜像,docker save 就能导出成 tar.gz 了
20015jjw
2024-02-21 18:38:39 +08:00
pipx?
liuhuansir
2024-02-21 18:53:00 +08:00
@zengxs docker 的方式大家都知道,我的需求是在一台新的服务器上直接跑
liuhuansir
2024-02-21 18:55:26 +08:00
@longbow0 这种方式我下午试过了,按文档里的说法应该是可以的,但是我执行起来还是报错,看报错信息,里面有些模块会去/usr/local/python3 下找,新服务器没装 python
ClericPy
2024-02-21 19:00:14 +08:00
如果没有很特殊的库, 用 https://pypi.org/project/zipapps/ 就够了吧.

如果两头 python 版本和环境一样的, 不用开 -d 模式提前安装好依赖, 如果有 c 依赖 记得 -u=AUTO 或 -u=*

把依赖和代码打包到一块, 可以带 entrypoint / shebang 直接运行, 也可以当个 venv
ClericPy
2024-02-21 19:02:08 +08:00
呃, 没装 python 就装个 python?

https://github.com/indygreg/python-build-standalone/releases 一大堆绿色版 python

如果想打二进制可执行文件, nuitka 就行了, 不会 nuitka 可以直接用 GUI 生成 https://github.com/ClericPy/nuitka_simple_gui
liuhuansir
2024-02-21 19:02:35 +08:00
厚着脸皮通过研发总监找到了公司制作这个包的开发,他给了文档,感觉有点复杂,需要手动修改 bin 目录下的可执行文件,把依赖的 so 复制进去,手动处理所有的软连接
YaakovZiv
2024-02-21 20:17:34 +08:00
@gcc1117 坑之一是,调用资源必须全绝对路径,因为相对路径会把系统环境自带的文件调用,系统环境如果不是预想环境,会在运行时出现各种奇怪问题。
longbow0
2024-02-21 20:21:00 +08:00
@liuhuansir 在创建 conda 环境的时候,指定安装 python 看看:conda create -n myenv python=3 pip ,这样就会在这个环境下安装需要版本的 python
Frankcox
2024-02-21 21:01:16 +08:00
手动装好 python+venv 环境+ bat 脚本,我前一段时间写了一个程序给公司其他同事,因为一些安全问题只能在个人电脑上跑,我就直接这么给人家的
duanzhanling
2024-02-22 07:24:56 +08:00
docker
lovelylain
2024-02-22 08:21:39 +08:00
另一台服务器上相同路径解压后,要先 source activate 激活环境,才能
xchaoinfo
2024-02-22 09:15:10 +08:00
这个方案我搞过,miniconda 安装后,/path/python -m pip install 安装需要的包,然后直接复制到另外机器的相同路径,然后直接 /path/python xx.py 执行就可以了。期间不要添加任何环境变量啥的
yulgang
2024-02-22 09:43:52 +08:00
如果另一台什么都不想装,那就 chroot 方式 ?
lzZzeucJri6FcR0o
2024-02-22 10:04:08 +08:00
python3-virtualenv
beyondstars
2024-02-22 10:32:49 +08:00
把整块硬盘拆下来带过去。
jiejiss
2024-02-22 11:11:31 +08:00
直接打包成 rootfs ,在另一台机器上 systemd-nspawn
zuiyue123
2024-02-22 11:14:46 +08:00
所有环境都安装在虚拟环境,把整个虚拟环境打包拷贝过去,在新环境里面直接执行就可以的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1017166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX