2012-06-21 28 views
1

我正在使用cx_freeze生成一個簡單的PyQt應用程序與python 3.2 x86在64位Windows下的exe。cx_freeze從錯誤的位置複製DLL

的問題是,雖然cx_freeze拷貝所有的依賴完全沒有在一起,但由於一些奇怪的原因,不從我的Python使用QtCore4.dll安裝,而是執行以下操作:

copying D:\Python\Python 3.2 x86\lib\site-packages\PyQt4\QtCore.pyd -> build\exe.win32-3.2\PyQt4.QtCore.pyd 
copying C:\Program Files\MiKTeX 2.9\miktex\bin\x64\QtCore4.dll (!!) -> build\exe.win32-3.2\QtCore4.dll 

現在ISN如果我創建64位版本(儘管仍然不完美),那麼問題不大,但顯然64位DLL不適用於我的32位exe。那麼,如何讓cx_freeze停止在我的系統路徑中查找dll,而是讓它在我的控制中搜索sys.path或其他路徑?

我試過將path選項明確設置爲sys.path,但無濟於事。

+0

你試過了哪個路徑相關的命令行選項?另外,是否在運行腳本之前嘗試修改命令行中的PATH環境變量('SET PATH = C:\ python32 ...')? –

+0

@Jesse只是'build_exe'的''path'選項,但這似乎只對python文件而不是dll很重要。如果我從系統路徑中刪除了'MikTeX'安裝,它會使用正確的dll(是的,這是我當前的解決方法),但我更喜歡不涉及這種攻擊的解決方案。 – Voo

回答

2

您至少有3個選項根據所提供的數據,我可以看到:

1)您可以選擇bin-path-excludes添加到build_exe文件,你希望從過程中排除的路徑。具體到你的例子:

bin-path-excludes: ["C:\Program Files\MiKTeX 2.9\miktex\bin\x64",] , 

2)重新安排你PATH永久從而使進入是MiKTEX稍後出現比QtCore4.dll導入要使用(這可能具有排除它是一個可行的選擇)的後果。

3)在調用cx_freeze腳本之前,將批處理(或shell)腳本中的cx_freeze調用封裝在腳本中並操作PATH。

我在這種情況下找不到任何Web上的例子,所以我的研究基於閱讀cx_freeze源代碼。很可能有一種更優雅的技術,但從文檔和源代碼都看不出來。

+0

是的,我希望有某種方式來操作二進制文件的路徑只能指向python目錄。我現在正在使用一個腳本來正確設置環境變量 - 不是傳統的,但至少它應該適用於每個人。 – Voo