1

我已经用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'],
)
4

2 回答 2

2

通过“自定义包”,我假设您的意思是构成您的应用程序的自定义 python 模块。我可能会建议尝试使用 setup() 调用的“包含”选项来手动指定应该包含的 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 上

于 2012-04-05T20:13:48.623 回答
0

cx_freeze 就是答案。

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

于 2012-04-05T18:30:41.823 回答