2013-06-20 34 views
0

我一直在研究一个需要使用pyinstaller加载数据文件(PNG文件和锅文件)的应用程序,并且我一直在跟踪临时文件夹的文件,数据文件不会添加到出于某种原因,临时文件夹。我做了一个小模块,以保持其作为后续目录的轨迹:使用pyinstaller2.0加载数据文件

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

+0

我不认为你可以做--onefile和其他任何东西--onefile; P ...你将不得不手动将资源放在同一个地方,并可能创建一个zip或其他东西(我可能是错的.. 。) –

回答

0

来自最近走过学习曲线的noob的一些建议。有很多事情会导致错误。首先得到的EXE工作,不包括数据文件...

1)你使用的是Windows?我做了一个批处理文件来运行命令(看起来好几百次,直到我得到它的工作),'暂停'保持打开窗口看到错误消息。

pyinstaller.py --onedir filename.py
pause

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

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

4)我通过一个批处理文件也运行可执行文件(因为我是一个noob并且必须反复运行),再次使用“暂停”命令,这样窗口保持打开状态,您可以读取错误。

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