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

Python有没有能够打包之后能够在没装Python的Linux平台上运行的方法么?

  •  
  •   xseven007 ·
    xseven007 · 2013-08-08 21:00:58 +08:00 · 14103 次点击
    这是一个创建于 3093 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Python有没有能够打包之后能够在没装Python的Linux平台上运行的方法么?python可以用py2exe打包成exe在没有python的Windows机器上运行,那么有没有方法打包成能够在Linux上运行的方法,也许你们会说Linux安装python很方便,但是路由器这样的小储存的东西,能精简尽量精简.
    33 条回复    1970-01-01 08:00:00 +08:00
    shibo501c
        1
    shibo501c  
       2013-08-08 21:43:51 +08:00
    虽然不知道怎么弄, 但是感觉好像sublime text2 就是内置了一个python
    jjx
        2
    jjx  
       2013-08-08 21:58:34 +08:00
    cx_freeze
    binux
        3
    binux  
       2013-08-08 22:10:42 +08:00
    pyinstaller
    toctan
        4
    toctan  
       2013-08-08 22:54:17 +08:00 via Android
    主流的 Linux 发行版应该都装了 python 吧
    fucker
        5
    fucker  
       2013-08-08 23:03:31 +08:00
    归根结底还是要变成二进制来跑,没有合适的python,无论怎么打包都不可能运行。就好比哪怕是py2exe打包了一个x86架构下的py程序,放在没有定制过的wince上面也是跑不了的。同样的可以类比一下,64位linux下编译的C程序放在32为linux上运行不了,一个道理。
    楼主你所谓的打包了,就是转为二进制了,要看机器。如果是路由,我估计不行。
    fucker
        6
    fucker  
       2013-08-08 23:08:22 +08:00
    再补一句,用arm-linux-gcc编译的linux内核在arm板子上跑python,python源码必须也用arm-linux-gcc交叉编译,然后你的 .py 程序就无所谓了。如果在x86的linux上打包 .py 为二进制,那么即便是有打包的方法,放在arm linux上也跑不了。。

    我说的比较乱,楼主你缕一缕。。。我其实也不知道能不能打包,如果能打包,那也得在这个路由的架构下打包,你电脑所使用的平台打包是运行不了的。。
    xseven007
        7
    xseven007  
    OP
       2013-08-09 08:55:30 +08:00
    @toctan
    @fucker 在路由器平台上,不是所有的都有足够空间安装python的,所以希望用打包的方式.我需要的不是一个能够拥有完整模块的python,而是根据.py文件需要的模块进行打包的.这样就能最大程度精简文件.交叉编译不是问题.都能做.有没有好的方案,能够打包产2~4MB的那种,类似于goagent的打包方法,包很小
    vilic
        8
    vilic  
       2013-08-09 10:02:24 +08:00
    IronPython + Mono? 我随便扯下。
    fucker
        9
    fucker  
       2013-08-09 12:35:43 +08:00 via iPhone
    @xseven007 我真没有,sorry
    xingxiucun
        10
    xingxiucun  
       2013-08-09 13:37:39 +08:00
    virtual env ?
    funagi
        11
    funagi  
       2013-08-09 13:55:31 +08:00
    买个能插U盘的路由器——最有效最彻底最省时间的解决办法
    PotatoBrother
        12
    PotatoBrother  
       2013-08-09 14:04:38 +08:00 via iPhone
    py2exe打包出来文件一堆,用不惯
    kimjxie
        13
    kimjxie  
       2013-08-09 14:29:11 +08:00
    @xseven007 Python的打包实际上就是提供Python运行环境提供程序入口。简单来说libpython2.7.so或者python27.dll是必须包含在目标文件里的.
    标准版本里windows的2M多点,linux6M多点, 看样子windows下更接容易近目标一点.

    另外, goagent那个goagent.exe是msvc开发的吧, 所以能做到100多K,真正Python的程序是那个proxy.exe, 4M多点.

    少数几个tinypy python-for-arm-linux这样的都是老项目目前已经很久不更新了。
    xseven007
        14
    xseven007  
    OP
       2013-08-09 15:00:18 +08:00 via Android
    @kimjxie 真正打包的是Python.zip。我想要的那种效果应该和他打包的样式差不多,win下用py2exe打包成一个.exe和一个zip,Linux下我希望打包成一个二进制文件,和一个zip,但是不知道用什么方式打包。。
    xseven007
        15
    xseven007  
    OP
       2013-08-09 15:01:20 +08:00 via Android
    @jjx 这个我考虑过,但是要先在mips的路由器上编译好这个模块才能打包,比较伤的是路由器编译这个是硬伤。。
    feuvan
        16
    feuvan  
       2013-08-09 15:18:32 +08:00
    看Sublime Text 2的打包,Python在一个zip里
    Ever
        17
    Ever  
       2013-08-09 15:55:43 +08:00
    要是跨编链都完善,拿c写个loader文件,或者用cython --embed example.py生成c文件,编译的时候把libpython.a搞进去,再打包下需要的py文件,应该就没问题了
    0bit
        18
    0bit  
       2013-08-09 17:02:10 +08:00
    有没装Python的Linux?
    xseven007
        19
    xseven007  
    OP
       2013-08-09 17:05:13 +08:00
    @0bit Linux内核的路由器..
    @Ever 我试试,首先我要研究一下怎么写...
    kimjxie
        20
    kimjxie  
       2013-08-09 17:20:50 +08:00
    @xseven007 有段时间没用 看来我存档里的版本有些年头了啊
    瞅了瞅新版本 本质上是没有区别的 新的方式把核心代码做成了平台无关 更好发布

    如果仅仅是说goagent打包这个问题,可以看看https://github.com/goagent/pybuild 和https://github.com/goagent/taskbar 这两个goagent名下的工具项目
    看上去goagent是用的py2exe

    实际上我之前想说的是关键是,不管目前何种方式(pyinstaller,py2exe,cx_freeze)的打包,python所需要的动态资源库文件是必须的,这个文件的大小和平台问题解决了,才能继续后面的问题。
    换句话说,如果能容纳下基本的python和libpython.so, 打包与否已经不重要了
    xseven007
        21
    xseven007  
    OP
       2013-08-09 20:37:59 +08:00
    @kimjxie 很多国产路由器刷Tomato,有16M的rom.可以放个打包好的吧
    yangff
        22
    yangff  
       2013-08-09 21:07:57 +08:00
    Py2Exe也是带了个python的。。
    kimjxie
        23
    kimjxie  
       2013-08-09 23:24:35 +08:00
    @xseven007 这个容量应该没啥问题了 hoho
    RainFlying
        24
    RainFlying  
       2013-08-09 23:32:45 +08:00
    你带上一份 Python 解释器就没问题了
    再给一个启动脚本
    xseven007
        25
    xseven007  
    OP
       2013-08-10 07:49:45 +08:00 via Android
    @kimjxie 这个容量还是不能用安装包安装,只能用根据py文件需要的模块打包的简洁版本。。
    @RainFlying 这个是不是就更麻烦了啊
    jinfan1009
        26
    jinfan1009  
       2013-08-17 15:34:36 +08:00
    python能单独运行?python是解释型语言,必须要有解释器才行吧。
    xseven007
        27
    xseven007  
    OP
       2013-08-17 19:35:29 +08:00
    @jinfan1009 我的意思就是把.py文件里需要的模块压缩成zip然后用二进制文件调用,类似win下的py2exe打包方式
    itfanr
        28
    itfanr  
       2013-08-17 19:46:39 +08:00
    @xseven007 肯定不行啊!python是动态语言OK?你研究下linux下二进制文件运行原理吧。我也不懂
    vicence
        29
    vicence  
       2013-09-01 23:27:55 +08:00
    @funagi http://www.zjdg.com/forum.php?mod=viewthread&tid=371988&extra=page%3D1
    头一回听说有可以插U盘的路由器,查了一下真有
    flowerfly
        30
    flowerfly  
       2013-09-01 23:54:32 +08:00
    xavierskip
        31
    xavierskip  
       2013-09-24 23:53:31 +08:00   ❤️ 1
    你是在问这个么?

    http://www.pyinstaller.org/

    win,linux,os x 都可以哦。
    Matrix24
        32
    Matrix24  
       2013-12-30 15:46:50 +08:00
    @xavierskip 我在OS X上打包的程序,运行没有反应,可用Py2app却可以,请问为什么?
    xavierskip
        33
    xavierskip  
       2013-12-30 16:02:19 +08:00
    @Matrix24 不清楚,我也没mac
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1047 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:37 · PVG 05:37 · LAX 13:37 · JFK 16:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.