分享

py2exe

 liluvu 2012-09-28

简介
py2exe就是将python代码打包成windows可执行程序的一个python开源项目。
官方网站:http://www.py2exe.org/
下载地址:http:///projects/py2exe/files/

经典代码

代码1:setup.py          (清爽简约模式----生成未打包的windows console)
执行方式:python setup.py
============================================================
from distutils.core import setup
import py2exe
import sys

# In fact, the effect equals call "python setup_example.py py2exe".
sys.argv.append('py2exe')
setup(console=["yourcode.py"])
============================================================

代码2:setup.py             (雍容华贵模式----打包成单一的windows console) 
执行方式:python setup.py py2exe
============================================================
from distutils.core import setup 
import py2exe

includes = ["encodings", "encodings.*"] 
options = {"py2exe": 
            {   "compressed": 1, 
                "optimize": 2, 
                "bundle_files": 1, 
                "includes": includes
            } 
          } 
Mydata_files = [('', ['config.ini','file2.txt','file3.txt']),('image', ['pic.jpg'])]
setup(     
    version = "1.0", 
    description = "Yahoo Tool", 
    name = "Nonove", 
    options = options, 
    zipfile=None,
    data_files = Mydata_files,
    console=[{"script": "Yourcode.py", "icon_resources": [(1, "your.ico")] }]
    )

============================================================

代码注释

[1] options中的bundle_files:

值为1表示pyd和dll文件会被打包到exe文件中,且不能从文件系统中加载python模块;
值为2表示pyd和dll文件会被打包到exe文件中,但是 可以从文件系统中加载python模块;
值为3表示不打包;

[2] setup中的zipfile:

当zipfile=None时,表示不生成library.zip,也可以自己设置zip文件名称

[3] setup中和console对应的还有:

console表示windows控制台程序;
windows表示windows图形化程序;
service表示windows服务,语法:setup(service=["MyService"])
com_server表示为COM servers,语法:setup(com_server=["win32com.server.interp"])

[4] setup中的data_files:

表示包含的各种文件,代码中表示包含3个数据文件在根目录,并在image子目录下包含一个图片文件。更详细见官网

常见的问题

[1] 打包后的exe不可执行,是由于缺少两个必要的文件,msvcr90.dll和Microsoft.VC90.CRT.manifest,其中msvcr90.dll的版本为9.0.21022.8,详细解释见官网

解决方法:将上述两个文件copy进dist文件夹,或者见官网的解决方式(在打包前,将这两个文件作为资源,直接复制到dist文件夹下)。

[2] 打包后的exe报错,说缺少文件,这个问题的主要原因是python代码import文件时,使用了某些模块提供的所谓lazy import,使得打包时,py2exe找不到类库真正的路径

解决方法:重新import类库文件的真实路径,然后重新打包,问题解决。

[3] 需要打包一些系统dll,有时候,我们想要将一些dll打包进exe里面,就需要修改py2exe的默认配置,详见官网

[4] 关于dist文件夹下的文件都是干什么用的,见这里。w9xpopen.exe这个是为了适应win9x平台。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多