怎么把 Python 运行环境打包到别的机子上

2017-08-29 10:58:00 +08:00
 qsnow6

在本机编好的脚本,因为本机和远程 VPS 的 python 环境不一样,想打包一份运行环境到远程的 VPS 上,试了下 virtualenv 好像只能本地隔离,在 VPS 上解压后 python 版本没有变化。

virtualenv 不能处理这个事情吗?或者有其它的替代方案?


本机系统:mac os

本机 python 版本:3.5.1

VPS python 版本:2.7.5

VPS 系统:CENTOS

我的操作是这样的

virtualenv --no-site-packages venv
...
source venv/bin/activate
13370 次点击
所在节点    Python
24 条回复
sunwei0325
2017-08-29 11:03:15 +08:00
本地: pip freeze > requirements.txt
服务器 virtualenv + source 进入新环境后
sunwei0325
2017-08-29 11:03:55 +08:00
pip install -r requirements.txt
不好意思, 按到 cmd + enter 了, 发了两条
mlyy
2017-08-29 11:04:07 +08:00
docker.Or 自己编译 python
sunwei0325
2017-08-29 11:04:46 +08:00
服务器得手动编译 python3 源码装个 python3
shuizhengqi
2017-08-29 11:06:04 +08:00
你有听说过 docker 吗
nullcoder
2017-08-29 11:07:24 +08:00
LZ 这种情况应该还是用 Docker 比较好
qsnow6
2017-08-29 11:10:42 +08:00
那我看看 docker。好像 docker 更名了?应该怎么搜
@shuizhengqi
@nullcoder
mckelvin
2017-08-29 11:12:39 +08:00
推荐用 https://github.com/jazzband/pip-tools 以固化版本号的方式管理 python 依赖,pip freeze 会带来一堆没必要的依赖。之后你在远程的虚拟机上初始化 virtualenv 安装 requirements.txt 定义好的依赖。virtuelenv 只能提供 python module 层次上的隔离,如果你追求操作系统(内核层以上)的隔离,可以用 docker.

一般情况下建议用 pip-tools 固化版本号,同时在 Dockerfile 中定义如何安装系统包以及 python module, 这样远程虚拟机只要构建出 docker image 就可以直接跑了。
Neveroldmilk
2017-08-29 11:16:15 +08:00
docker 现在的商业化运营策略有问题,再说了碰上 docker 内部的不兼容问题只能干瞪眼。所以还是兼容自己配置原生环境的好。
nullcoder
2017-08-29 11:16:46 +08:00
GavinHsueh
2017-08-29 15:23:36 +08:00
docker
wencan
2017-08-29 15:55:31 +08:00
少打包
其它机器很可能运行环境不同

docker 之类另说
bitsjx
2017-08-29 16:03:50 +08:00
如果 VPS 的 python 版本可以升级的话,可以考虑在本机上编译安装目标机上相同版本的 python,然后安装所有需要的 python 包,把所有的软件包打包成.whl 格式,到目标机器上直接 pip install 安装。
praynise
2017-08-29 17:35:40 +08:00
我之前也问过相同的问题…目前个人感觉是这样,如果能上 docker 的话最好上 docker。我这边比较特殊,生产环境不让上 docker,我的做法比较取巧,是在生产上和开发上安装相同的 gcc 版本和 python 版本,开发环境使用 virtualenv,开发好了直接把整个 virtualenv 打包,放在生产环境上相同的目录结构下(一定要是相同的目录结构,不然 source activate 后配置会出问题)然后就可以直接跑了…
我的开发环境是 centos,生产环境是 redhat,目前运行没有问题…
MrgHOST
2017-08-29 19:02:27 +08:00
mark
timothyye
2017-08-29 21:18:57 +08:00
你需要 docker
rogwan
2017-08-29 22:27:45 +08:00
理论上讲,先创建一个纯 Python 的 env 环境,然后 copy site-packags 文件夹,就可以。win 和 Linux 之间迁移都成功过,也有莫名的失效过😂
msg7086
2017-08-30 01:03:34 +08:00
Python 是很多 Linux 发行版的核心组件。装的时候千万要小心,别把系统搞炸了。
shiroming
2017-08-30 02:50:57 +08:00
pyenv 别去自己搞替换系统 Python
songdezu
2017-08-30 03:10:16 +08:00
@praynise 你这种操作如果开发环境 osx, 生产环境 linux 的话 很可能就不行了

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

https://www.v2ex.com/t/386552

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

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

© 2021 V2EX