如何在exe中构建python包

时间:2012-04-05 16:58:32

标签: python py2exe pyinstaller

我已经在python中编写了我的程序。它写在七个文件中,在我导入自定义包的三个文件中。问题是我无法将我的程序构建到exe中。我试过pyinstaller 1.5.1和py2exe。我已经按照我能找到的每个教程,但没有成功。每当我尝试运行exe创建时,我都会收到一条错误消息,说它无法找到我的自定义包。我想我还没有能够将完整的软件包内置到exe中。请帮忙。

from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')

mfcfiles = [os.path.join(mfcdir, i) for i in ["mfc90.dll", "mfc90u.dll", "mfcm90.dll", "mfcm90u.dll", "Microsoft.VC90.MFC.manifest"]]

data_files = [("Microsoft.VC90.MFC", mfcfiles),]

setup(
    data_files = data_files,
    options = {'py2exe': {'optimize': 2}},
    windows = [{'script': "LoadFilesGUI.py"}],
    zipfile = "shared.lib",
)

另一:

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
    options = {'py2exe': {'optimize': 2}},
    windows = [{'script': "LoadFilesGUI.py"}],
    zipfile = None,
    console=['LoadFilesGUI.py'],
)

2 个答案:

答案 0 :(得分:2)

通过“自定义包”,我假设您的意思是构成应用程序的自定义python模块。我可能建议尝试使用setup()调用的“includes”选项来手动指定应包含的python模块,以防它们未被自动发现:

setup( 
    windows = [{'script': "LoadFilesGUI.py"}], 
    data_files = data_files, 
    zipfile = None, 
    options = {
        'py2exe': {
            'optimize': 2, 
            'bundle_files': 1,
            'includes' : [],
        }
    }, 
) 

例如,在我使用PyQt4的项目中,我的包含如下所示:

options={ 
    "py2exe": { 
        "includes" : ['sip','PyQt4.QtCore','PyQt4.QtGui',
                        'PyQt4.QtNetwork','PyQt4.QtWebKit'] 
    } 
}

您的setup.py脚本的其余部分似乎非常标准。确保包含的模块是PYTHONPATH的一部分,或者与项目相关,或者显式添加到路径中。

如果您在评论中说明MyPackage是项目中的一个软件包,那么您需要:'includes' : ['MyPackage']

如果这仍然给你带来错误,那么问题可能出在你的项目和包的结构上,或者你的PYTHONPATH

答案 1 :(得分:0)

cx_freeze就是答案。

根据我的经验,这是最可靠的选择。 有时它会错过某些依赖项,但是一旦发现缺少的内容,就可以轻松地手动添加它。