我一直在处理一个需要使用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。任何人都知道问题是什么?提前致谢!
答案 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遇到的任何问题,并且可能已经解决了这些问题。