2013-06-20 78 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時遇到的任何問題,並且可能已經解決了這些問題。