推荐学习书目
› 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
rrfeng
V2EX  ›  Python

我有一个奇怪的需求,请教大家

  •  
  •   rrfeng · Jul 14, 2014 · 4545 views
    This topic created in 4500 days ago, the information mentioned may be changed or developed.
    我写了一个 python 程序,单文件,系统默认环境 ,仅需要额外安装 python 的 X 模块。

    现在呢我想把这个 python 程序变成可以随便在相同系统环境的服务器上运行的脚本,但是又不想(或者不能/不方便)在其他服务器上安装 X 模块。

    我知道 pyinstaller 可以将 python 程序打包成单个可执行文件,但是这种做法又将服务器上原本就有的东西都包含在里面了,比如 sys 模块等等


    不知叙述是否清晰,可有解决办法?
    13 replies  •  2014-07-15 13:14:07 +08:00
    jokester
    jokester
    Jul 14, 2014
    1
    把X的内容抠出来 和你的程序一起发布?
    Kabie
    Kabie
    Jul 14, 2014
    2
    。。。这个X模块横竖都是要放上去的。。。

    不方便安装可以用venv……

    或者你干脆就把库的代码一起放进去不就好了。。。
    tonyluj
    tonyluj
    Jul 14, 2014
    3
    直接把库的代码一起放进去
    再自己静态编译个python也放进去
    这下就省心了
    mengskysama
    mengskysama
    Jul 14, 2014
    4
    看情况了,如果你用的第三方库是纯python的是没问题的。
    sandtears
    sandtears
    Jul 14, 2014
    5
    把第三方库代码一起放进去就好。
    rrfeng
    rrfeng
    OP
    Jul 14, 2014
    6
    @jokester
    @sandtears
    @tonyluj

    大概明白了,就是直接把 import X 替换成 class X : ... ... 的代码,都这么处理就可以了。

    但是 X 内部如果有错综复杂的 import 关系呢,手动改很大可能会出错的吧……

    谢谢各位
    ChanneW
    ChanneW
    Jul 14, 2014
    7
    @rrfeng 不是 import 的关系.
    你把需要的模块源码和你的代码放到同一个目录
    jokester
    jokester
    Jul 15, 2014
    8
    @rrfeng
    也可以把X的代码挖出来(参照virtualenv导出的目录结构), 和你的程序一起分发
    运行你的程序时先把X的目录加到sys.path, 再import X
    jprovim
    jprovim
    Jul 15, 2014
    9
    如果可以的話, 用virtualenv, 然後安裝所需的lib, 坐如下的命令.
    ```
    pip freeze > requirements.txt
    pip install -r requirements.txt
    ```

    如果不方便聯網的話, 可以看看這兩個文章.
    http://woodpecker.org.cn/diveintopython3/packaging.html
    http://www.ibm.com/developerworks/cn/opensource/os-pythonpackaging/
    rrfeng
    rrfeng
    OP
    Jul 15, 2014
    11
    @ChanneW
    将程序和 X 打包成 zip !就是这个办法了!

    @jprovim
    venv 太大材小用了吧。。我只是想做一个随便拷贝一下就能用的脚本

    @loading
    理解有误。。
    loading
    loading
    Jul 15, 2014 via Android
    12
    @rrfeng 把你的依赖一起打包就可以了,看下思路,没叫你抄!


    其实你把依赖的代码剥离出来放到你的程序文件里就可以了。大部分库也就是写好的函数而已,你理解这个就随便搞了。
    sandtears
    sandtears
    Jul 15, 2014
    13
    @rrfeng 不是啊。。
    比如说你要用 requests, 直接把人家代码下下来放到当前目录下,然后执行 import requests 就可以导入了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1665 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 13:26 · PVG 21:26 · LAX 05:26 · JFK 08:26
    ♥ Do have faith in what you're doing.