Python 如何打包依赖模块到服务器,类似 mvn 的 package+assemble - V2EX
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
sakura1
V2EX    Python

Python 如何打包依赖模块到服务器,类似 mvn 的 package+assemble

  •  1
     
  •   sakura1 2020-04-02 14:28:07 +08:00 3218 次点击
    这是一个创建于 2025 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,现在准备用 python 写一个 kafka 的 producer 造测试数据,但是公司服务器没联外网, pip install pykafka 显然是不可能能的。公司服务器是 linux 的,然后我的开发环境是 Mac OS,打包成 exe 八成没戏,仲么办?

    20 条回复    2020-04-02 20:33:40 +08:00
    bwangel
        1
    bwangel  
       2020-04-02 14:32:41 +08:00
    用 Docker 。

    > docker help export

    Usage: docker export [OPTIONS] CONTAINER

    Export a container's filesystem as a tar archive

    Options:
    -o, --output string Write to a file, instead of STDOUT

    > docker help import

    Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

    Import the contents from a tarball to create a filesystem image

    Options:
    -c, --change list Apply Dockerfile instruction to the created image
    -m, --message string Set commit message for imported image
    --platform string Set platform if server is multi-platform capable
    ipwx
        2
    ipwx  
       2020-04-02 14:32:44 +08:00
    anaconda
    dapang1221
        3
    dapang1221  
       2020-04-02 14:34:50 +08:00
    venv 啊
    sakura1
        4
    sakura1  
    OP
       2020-04-02 14:36:15 +08:00
    @bwangel 以后等公司服务器里有 docker 再试试把,docker 没有 docker
    sakura1
        5
    sakura1  
    OP
       2020-04-02 14:37:24 +08:00
    @ipwx 兄弟,没网啊,我想向 java 一样,在开发环境上把依赖啥的打包好,然后到服务器直接执行。
    wangyzj
        6
    wangyzj  
       2020-04-02 14:37:55 +08:00
    pyinstaller
    wuwukai007
        7
    wuwukai007  
       2020-04-02 14:40:22 +08:00 via Android
    下载 whl 的包离线安装
    ShuoHui
        8
    ShuoHui  
       2020-04-02 14:40:22 +08:00 via iPhone
    我前几天问过差不多的问题
    nifury
        9
    nifury  
       2020-04-02 14:40:54 +08:00
    https://stackoverflow.com/questions/11091623/how-to-install-packages-offline
    第二个回复可以只下载不安装,然后再转移到测试机上
    或者直接下载 wheel 文件安装?
    sakura1
        10
    sakura1  
    OP
       2020-04-02 14:41:02 +08:00
    venv 啥的好像是 python3 才有的吧,服务器里就一个 linux 自带的 python2,我继续撸 java 吧
    Trim21
        11
    Trim21  
       2020-04-02 14:41:05 +08:00
    找台有外网的 linux 服务器或者虚拟机包 exe 比较省劲,又要跨平台又要离线安装的需求太罕见了
    deljuven
        12
    deljuven  
       2020-04-02 14:44:12 +08:00
    容器镜像或者虚拟机镜像,venv 也可以,但是如果跨平台的话就有问题
    bwangel
        13
    bwangel  
       2020-04-02 14:45:16 +08:00
    https://github.com/Parsely/pykafka/blob/master/pykafka/rdkafka/_rd_kafkamodule.c

    1. pykafka 中是有 C 代码的,你在 Mac 上创建的 venv 放到 Linux 上是不能使用的,必须本地也在 Linux 中构建。
    2. pykafka 依赖一个 C 库,https://github.com/edenhill/librdkafka,所以你先要在 公司服务器上装好这个库。

    所以 Docker 真是最简单的办法了。
    raysmond
        14
    raysmond  
       2020-04-02 14:48:12 +08:00
    用 wheel 打包所有依赖包
    pip wheel -r requirements.txt -w wheels
    tar czf delphinus-wheels.tar.gz wheels/
    bwangel
        15
    bwangel  
       2020-04-02 14:48:44 +08:00
    另外,如果你的项目不复杂的话,还有一个建议就是用 Go 重写。

    在交叉编译好了以后,直接把可执行文件扔到公司服务器上运行,不需要任何的依赖。
    sakura1
        16
    sakura1  
    OP
       2020-04-02 14:59:51 +08:00
    @bwangel 谢老哥了
    ipwx
        17
    ipwx  
       2020-04-02 14:59:54 +08:00
    @sakura1 anaconda 可以打包环境啊,你搞一个离线 anaconda 安装包到 linux 上装好,然后导入环境不就得了。

    mac 你装个虚拟机,然后把环境弄好给打包呗。
    ClericPy
        18
    ClericPy  
       2020-04-02 15:14:43 +08:00
    用 shiv 打包成 pyz, 但是还是离不开 Python 解释器, 这种问题问的挺多的, V2EX 上就不止回复 2 次了.....
    jingcoco
        19
    jingcoco  
       2020-04-02 19:54:47 +08:00 via Android
    。。。我曾经试过让我的电脑代理服务器上网。。。。。
    lance86
        20
    lance86  
       2020-04-02 20:33:40 +08:00
    回 5 楼,就算是你写 java,你也要在服务器上装 jre 不是? docker 的话有离线安装包,镜像可以导出成文件然后离线还原,就能运行了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2847 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:28 PVG 15:28 LAX 00:28 JFK 03:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86