python程序打包,来源于知乎(已验证)

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

修改原有的打包代码为:html

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 是最好的选择。python


1. 安装py2exewindows


可直接到这里下载app

py2exe - Browse /py2exe/0.6.9 at SourceForge.netui

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

py2exe-0.6.9.win32-py2.7.exe.net

若是你安装的Python是64位的,则下载命令行

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


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

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' 
<img data-rawheight="51" data-rawwidth="294" src="https://pic2.zhimg.com/50/68241bc8e6fd01845d083cf6783dd596_hd.jpg" class="content_image" width="294">

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

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

<img data-rawheight="286" data-rawwidth="727" src="https://pic3.zhimg.com/50/60d5406e40c1b7a54be3d7251ac0afb7_hd.jpg" class="origin_image zh-lightbox-thumb" width="727" data-original="https://pic3.zhimg.com/60d5406e40c1b7a54be3d7251ac0afb7_r.jpg">

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


<img data-rawheight="66" data-rawwidth="302" src="https://pic1.zhimg.com/50/f0e6ea877ad4bd7de6fecef81c0c3408_hd.jpg" class="content_image" width="302">

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


5 一点儿背景知识


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


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


6 关于Python3


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

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

https://pypi.python.org/pypi/py2exe/


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


<Python3-Install-Path>\Scripts\build_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_()
相关文章
相关标签/搜索