zoukankan      html  css  js  c++  java
  • python程序打包,来源于知乎(已验证)

    百度经验方法:https://jingyan.baidu.com/article/22a299b5ec76869e19376ad9.html
     
     pandas导包问题解决方案:

    修改原有的打包代码为:

    pyinstaller -F -w -i xxx.ico yyy.py --hidden-import=pandas._libs.tslibs.timedeltas
    • 1
    • -F 指只生成一个exe文件,不生成其他dll文件
    • -w 不弹出命令行窗口
    • -i 设定程序图标 ,其后面的ico文件就是程序图标
    • yyy.py 就是要打包的程序
    • –hidden-import=pandas._libs.tslibs.timedeltas 隐藏相关模块的引用
     
     知乎:
    作者:Jerry Jho
    链接:https://www.zhihu.com/question/29738031/answer/45431132
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    • Windows 平台
    • Python 2.7.9(Python 2最新版)

    py2exe 是最好的选择。


    1. 安装py2exe


    可直接到这里下载

    py2exe - Browse /py2exe/0.6.9 at SourceForge.net

    应选择Python对应的版本。例如我们的Python是32位的2.7.9,则下载

    py2exe-0.6.9.win32-py2.7.exe

    如果你安装的Python是64位的,则下载

    py2exe-0.6.9.win64-py2.7.amd64.exe


    查看Python是32位还是64位,只需到命令提示符下运行:

    python -c "import sys;print '%x' % sys.maxint"
    

    32位的Python会输出7fffffff,64位的Python会输出7fffffffffffffff

    注意我们关注的是Python的版本而不是Windows的版本。


    一般说来,处于兼容性的考虑,应该安装32位的Python,否则编译好的程序将无法在32位的Windows下运行。


    2 准备你的Python程序


    需要确保你的Python程序能够正常运行。

    例如我们的程序叫hello.py,里面的内容就一句话:

    print 'Hello,Python'
    

    3 准备setup.py


    你需要告诉py2exe转换时所需要的设置。

    在同一个目录下新建一个文件,比如叫build.py,写入以下代码:

    from distutils.core import setup
    import py2exe
    
    setup( console=['hello.py'],
           zipfile = None,
           options = {'py2exe' : { 
                         "bundle_files": 1,
                         "dll_excludes": ["MSVCP90.dll","w9xpopen.exe"]
                         }
                      }
     )
    

    build.py 包含了许多设置。包括你自己的Python程序的文件名,是否创建独立的应用程序等。如果想把这个build.py用到其他Python程序,只需要修改console=['hello.py'],中的'hello.py'即可。


    4 生成可执行文件


    在命令行下运行:

    python build.py py2exe
    

    屏幕会输出大量的信息。如果工作正常,会以以下信息结束:


    当前目录下会产生两个目录,dist和build。目录build含有转换时所需要的临时文件;dist含有最终转换的结果。



    可以把dist目录下的hello.exe拷给别人了,它不需要对方的电脑上安装Python。


    5 一点儿背景知识


    仅仅是输出'Hello Python',最终得到的hello.exe却有5M之巨。py2exe 的原理,简单的说就是把一个迷你的Python和你的程序捆绑在了一起。在其他计算机上运行时,就相当于先快速‘安装’了一个Python,只不过对方感觉不到而已。


    ===================== 更新 =====================


    6 关于Python3


    py2exe 项目对于Python2和Python3发布了互不兼容的安装包。

    对于Python3,通过easy_install或者pip在线安装py2exe即可,或者到下面的网址下载安装包。


    对于Python3的py2exe,除了与Python2相同的build.py的方式,还有一种简单直接的方法,适用于不需要额外配置的情况。例如你的Python程序叫做hello.py,在命令行输入


    <Python3-Install-Path>Scriptsuild_exe hello.py -b 0 -c
    

    其中,<Python3-Install-Path>指你Python3的安装目录,选项-b 0含义为“创建单一可执行文件”,-c的含义是“对可执行文件进行压缩”


    此时会在dist/目录下出现hello.exe。是不是很方便?


    ===================== 更新 =====================


    6 关于GUI应用程序的编译封装

    6.1 wxPython
    不需要额外的处理。
    如果不愿意弹出console窗口的话,可在build.py里将“console=['hello.py']”改成“windows=['hello.py']”,即

    from distutils.core import setup
    import py2exe
    
    setup( windows=['hello.py'],
           zipfile = None,
           options = {'py2exe' : {
                         "bundle_files": 1,
                         "dll_excludes": ["MSVCP90.dll","w9xpopen.exe"]
                         }
                      }
     )
    
    6.2 PyQt4
    build.py 需要增加sip。另外,鉴于文件较大,最好进行压缩。示例build.py:
    from distutils.core import setup
    import py2exe
    
    setup( windows=['hello.py'],
           zipfile = None,
           options = {'py2exe' : { 
                         "bundle_files": 1,
                         "dll_excludes": ["MSVCP90.dll","w9xpopen.exe"],
                         "includes": ["sip"],
                         "compressed": 1,
                         "optimize": 2,                     
                         }
                      }
     )
    
    鉴于py2exe是使用扫描import的方法自动决定打包的文件,因此,下面的代码,虽然以脚本方式可以运行,但是编译后会产生QtCore无法找到的错误:

    #!/usr/bin/python
    
    from PyQt4.QtGui import *
    
    if __name__ == '__main__':
        app = QApplication([])
        w = QWidget()
        w.show()
        app.exec_()
    
    正确的做法是按照Qt本身的依赖,写完所有所依赖的module:
    #!/usr/bin/python
    
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    
    if __name__ == '__main__':
        app = QApplication([])
        w = QWidget()
        w.show()
        app.exec_()
  • 相关阅读:
    html优化
    HTML练习(网页计算器)
    hdu--4574 Bombs(dfs)
    Robots at Warehouse(搜索+vector的使用)
    poj 2111 Millenium Leapcow(记忆化搜索)
    Codeforces Round #408 (Div. 2) C. Bank Hacking(暴力啊!暴力)
    Gym
    Gym
    浙江省赛--D
    浙江省赛--C
  • 原文地址:https://www.cnblogs.com/alexander9864/p/9197017.html
Copyright © 2011-2022 走看看