0

我一直在开发一个需要使用pyinstaller加载数据文件(png文件和pot文件)的应用程序,并且我一直在跟踪临时文件夹的文件,由于某种原因,数据文件没有添加到临时文件夹中。我制作了一个小模块来跟踪目录,如下所示:

 import os, sys

 def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

我还修改了规范文件:

a = Analysis(['mks_controller.py'],
             pathex=['C:\\pyinstaller-2.0\\pyinstaller-2.0'],
             hiddenimports=[],
             hookspath=None)
a.datas += [('presentation.potx','C:\\pyinstaller-2.0\\pyinstaller-2.0\\bbpresentation.potx','DATA'),('splat.png','C:\\pyinstaller-2.0\\pyinstaller-2.0\\splat.png', 'DATA'),('logo.png','C:\\pyinstaller-2.0\\pyinstaller-2.0\\logo.png','DATA')]
pyz = PYZ(a.pure)

我使用以下两个命令构建了 exe:

pyinstaller.py --onefile filename.py 
pyinstaller.py --onefile filename.spec

并且数据文件没有加载到目录中。我还尝试运行显示此目录中所有文件的日志,但未显示数据文件。这是它的屏幕截图:

http://imgur.com/delete/qIff0zZT2Y4ZdKT

我正在使用 python 2.7 和 pyinstaller 2.0。任何人都知道问题是什么?提前致谢!

4

1 回答 1

0

来自最近经历了学习曲线的菜鸟的一些建议。有很多事情会导致错误。首先让exe工作而不包括数据文件......

1)你在用窗户吗?我制作了一个批处理文件来运行命令(似乎数百次,直到我让它工作)并且“暂停”保持窗口打开以查看错误消息。

pyinstaller.py --onedir filename.py
pause

2)我使用了--onedir。无论如何,一个文件需要一段时间才能解压缩所有资源,因此在测试期间浪费了时间。我将所有数据文件放在驱动器上的单独目录中进行测试,并在我的程序中使用绝对路径。然后,如果您仍然无法让 onefile 正常工作,则可以手动将它们包含在 dist 目录中,并在以后在您的程序中相应地设置相对路径。在担心编辑规范文件并将所有内容打包到一个文件中之前解决其他错误。

3)我不担心编辑规范文件,因为我没有包含数据文件!

4)我还通过批处理文件运行了可执行文件(因为我是菜鸟,不得不一遍又一遍地运行它),再次使用“暂停”命令,这样窗口就保持打开状态,您可以读取错误。

5) 最后,为了修复错误,我不得不切换到最新的 pyinstaller 开发代码(修复了“pythoncom”错误)。开发代码似乎更好地帮助调试,因为它提供的“警告”更少。我还必须将模块(在我的情况下为 pyproj)更新为最新版本。我建议您修复已安装模块的错误的第一件事是更新它们。各种模块维护人员可能都知道他们在使用 pyinstaller 时遇到的任何问题,并且可能已经解决了这些问题。

于 2013-06-27T05:17:49.770 回答