使用pyinstaller 2.0加载数据文件

时间:2013-06-20 22:03:04

标签: python python-2.7 pyinstaller

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

 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)

我还修改了spec文件:

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。任何人都知道问题是什么?提前致谢!

1 个答案:

答案 0 :(得分:0)

最近经历过学习曲线的菜鸟的一些建议。有很多东西可以给出错误。首先让exe工作而不包括数据文件......

1)你在使用Windows吗?我创建了一个批处理文件来运行命令(看似数百次,直到我得到它工作)并且'pause'保持窗口打开以查看错误消息。

pyinstaller.py --onedir filename.py
pause

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

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

4)我也通过批处理文件运行可执行文件(因为我是一个菜鸟,不得不一遍又一遍地运行它),再次使用'pause'命令,这样窗口保持打开状态,你可以读取错误。 / p>

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