V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
qsnow6
V2EX  ›  Python

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

  •  
  •   qsnow6 · 2017-08-29 10:58:00 +08:00 · 13150 次点击
    这是一个创建于 2425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在本机编好的脚本,因为本机和远程 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
    
    第 1 条附言  ·  2017-09-07 09:11:30 +08:00
    docker 已解决!
    第 2 条附言  ·  2017-09-07 09:11:34 +08:00
    docker 已解决!
    24 条回复    2017-09-07 07:53:54 +08:00
    sunwei0325
        1
    sunwei0325  
       2017-08-29 11:03:15 +08:00   ❤️ 1
    本地: pip freeze > requirements.txt
    服务器 virtualenv + source 进入新环境后
    sunwei0325
        2
    sunwei0325  
       2017-08-29 11:03:55 +08:00
    pip install -r requirements.txt
    不好意思, 按到 cmd + enter 了, 发了两条
    mlyy
        3
    mlyy  
       2017-08-29 11:04:07 +08:00
    docker.Or 自己编译 python
    sunwei0325
        4
    sunwei0325  
       2017-08-29 11:04:46 +08:00
    服务器得手动编译 python3 源码装个 python3
    shuizhengqi
        5
    shuizhengqi  
       2017-08-29 11:06:04 +08:00
    你有听说过 docker 吗
    nullcoder
        6
    nullcoder  
       2017-08-29 11:07:24 +08:00   ❤️ 1
    LZ 这种情况应该还是用 Docker 比较好
    qsnow6
        7
    qsnow6  
    OP
       2017-08-29 11:10:42 +08:00
    那我看看 docker。好像 docker 更名了?应该怎么搜
    @shuizhengqi
    @nullcoder
    mckelvin
        8
    mckelvin  
       2017-08-29 11:12:39 +08:00   ❤️ 2
    推荐用 https://github.com/jazzband/pip-tools 以固化版本号的方式管理 python 依赖,pip freeze 会带来一堆没必要的依赖。之后你在远程的虚拟机上初始化 virtualenv 安装 requirements.txt 定义好的依赖。virtuelenv 只能提供 python module 层次上的隔离,如果你追求操作系统(内核层以上)的隔离,可以用 docker.

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

    docker 之类另说
    bitsjx
        13
    bitsjx  
       2017-08-29 16:03:50 +08:00
    如果 VPS 的 python 版本可以升级的话,可以考虑在本机上编译安装目标机上相同版本的 python,然后安装所有需要的 python 包,把所有的软件包打包成.whl 格式,到目标机器上直接 pip install 安装。
    praynise
        14
    praynise  
       2017-08-29 17:35:40 +08:00
    我之前也问过相同的问题…目前个人感觉是这样,如果能上 docker 的话最好上 docker。我这边比较特殊,生产环境不让上 docker,我的做法比较取巧,是在生产上和开发上安装相同的 gcc 版本和 python 版本,开发环境使用 virtualenv,开发好了直接把整个 virtualenv 打包,放在生产环境上相同的目录结构下(一定要是相同的目录结构,不然 source activate 后配置会出问题)然后就可以直接跑了…
    我的开发环境是 centos,生产环境是 redhat,目前运行没有问题…
    MrgHOST
        15
    MrgHOST  
       2017-08-29 19:02:27 +08:00
    mark
    timothyye
        16
    timothyye  
       2017-08-29 21:18:57 +08:00 via Android
    你需要 docker
    rogwan
        17
    rogwan  
       2017-08-29 22:27:45 +08:00 via Android
    理论上讲,先创建一个纯 Python 的 env 环境,然后 copy site-packags 文件夹,就可以。win 和 Linux 之间迁移都成功过,也有莫名的失效过😂
    msg7086
        18
    msg7086  
       2017-08-30 01:03:34 +08:00
    Python 是很多 Linux 发行版的核心组件。装的时候千万要小心,别把系统搞炸了。
    shiroming
        19
    shiroming  
       2017-08-30 02:50:57 +08:00 via Android
    pyenv 别去自己搞替换系统 Python
    songdezu
        20
    songdezu  
       2017-08-30 03:10:16 +08:00
    @praynise 你这种操作如果开发环境 osx, 生产环境 linux 的话 很可能就不行了
    asdf123101
        21
    asdf123101  
       2017-08-30 03:34:23 +08:00 via Android
    用 docker 打包。简单方便。
    SharkIng
        22
    SharkIng  
       2017-08-30 03:43:50 +08:00 via iPhone
    我都是直接 tar virtualenv
    litter123
        23
    litter123  
       2017-08-30 10:21:49 +08:00
    直接编译安装,我的 VPS 上装了 2.6、2.7、3.6.1 三个版本,改名字区分,没什么问题啊
    oldbird
        24
    oldbird  
       2017-09-07 07:53:54 +08:00 via Android
    winpython,可否?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4886 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 09:43 · PVG 17:43 · LAX 02:43 · JFK 05:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.