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
rrfeng
V2EX  ›  Python

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

  •  
  •   rrfeng · 2014-07-14 17:17:26 +08:00 · 3691 次点击
    这是一个创建于 3574 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我写了一个 python 程序,单文件,系统默认环境 ,仅需要额外安装 python 的 X 模块。

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

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


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

    不方便安装可以用venv……

    或者你干脆就把库的代码一起放进去不就好了。。。
    tonyluj
        3
    tonyluj  
       2014-07-14 17:40:31 +08:00
    直接把库的代码一起放进去
    再自己静态编译个python也放进去
    这下就省心了
    mengskysama
        4
    mengskysama  
       2014-07-14 17:45:30 +08:00
    看情况了,如果你用的第三方库是纯python的是没问题的。
    sandtears
        5
    sandtears  
       2014-07-14 19:06:18 +08:00
    把第三方库代码一起放进去就好。
    rrfeng
        6
    rrfeng  
    OP
       2014-07-14 23:06:11 +08:00
    @jokester
    @sandtears
    @tonyluj

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

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

    谢谢各位
    ChanneW
        7
    ChanneW  
       2014-07-14 23:28:06 +08:00
    @rrfeng 不是 import 的关系.
    你把需要的模块源码和你的代码放到同一个目录
    jokester
        8
    jokester  
       2014-07-15 00:23:16 +08:00
    @rrfeng
    也可以把X的代码挖出来(参照virtualenv导出的目录结构), 和你的程序一起分发
    运行你的程序时先把X的目录加到sys.path, 再import X
    jprovim
        9
    jprovim  
       2014-07-15 02:10:18 +08:00
    如果可以的話, 用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/
    loading
        10
    loading  
       2014-07-15 06:14:01 +08:00 via Android
    rrfeng
        11
    rrfeng  
    OP
       2014-07-15 08:30:33 +08:00
    @ChanneW
    将程序和 X 打包成 zip !就是这个办法了!

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

    @loading
    理解有误。。
    loading
        12
    loading  
       2014-07-15 08:58:48 +08:00 via Android
    @rrfeng 把你的依赖一起打包就可以了,看下思路,没叫你抄!


    其实你把依赖的代码剥离出来放到你的程序文件里就可以了。大部分库也就是写好的函数而已,你理解这个就随便搞了。
    sandtears
        13
    sandtears  
       2014-07-15 13:14:07 +08:00
    @rrfeng 不是啊。。
    比如说你要用 requests, 直接把人家代码下下来放到当前目录下,然后执行 import requests 就可以导入了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2946 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 09:12 · PVG 17:12 · LAX 02:12 · JFK 05:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.