2014-10-18 91 views
5

我有一個python應用程序,我試圖構建爲pyinstaller可分配。一個類似的腳本在Linux上成功建立。如何將pyinstaller指向正確版本的MSVC?90.dll?

我在Windows 7 x64上構建它,但想要構建32位二進制以實現更好的兼容性,所以我使用的是32位python-2.7。我的依賴包括matplotlibpyside需要MSVC。我從Microsoft安裝名爲VCForPython27的軟件包。

我在運行我的pyinstaller腳本時遇到錯誤。我得到以下信息:

1250 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable 
7428 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ... 
7428 WARNING: Assembly not found 
7428 ERROR: Assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none not found 
7475 WARNING: lib not found: MSVCR90.dll dependency of C:\Python27\python.exe 
7553 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ... 
7553 WARNING: Assembly not found 
7553 ERROR: Assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none not found 
7662 WARNING: lib not found: MSVCR90.dll dependency of C:\Windows\system32\python27.dll 
7662 INFO: Analyzing C:\Python27\lib\site-packages\PyInstaller\loader\_pyi_boots 

有這樣議論多個消息兩個文件MSVCP90.dll和MSVCR90.DLL

我可以看到我有一個包含版本的文件夾C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2這兩個文件。

當我從Christoph Gohlke's pagepip(除了matplotlib,由於缺少依賴項而無法使用pip安裝)安裝我的python軟件包時,會發生這種不匹配。

奇怪的是pyinstaller產生二進制。然而,當我嘗試運行它,我得到一個彈出一句話:

WARNING: file already exists but should not: 
C:\Users\Martin\AppData\Local\Temp\_MEI34922\Include\pyconfig.h 

有誰知道我可以做任何以下的:

  1. 安裝珍貴x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none組裝?我在哪裏可以從這個特定的版本?
  2. 告訴python尋找其他版本(x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2)?
  3. 解決pyconfig.h不需要的存在問題?似乎沒有帶領任何地方,但我想我也應該嘗試。
  4. 找到另一種方法來構建我的代碼到二進制文件?這是一個複雜的代碼,運行外部的二進制文件,但如果我必須我會嘗試py2exe,不知道它會更好。
+1

解決方法爲'pyconfig.h'問題提出[這裏](http://stackoverflow.com/questions/19055089/pyinstaller-onefile-警告-pyconfig-H-當進口-SciPy的或 - SciPy的信號)。 – mapto 2014-10-19 01:03:33

回答

7

包含的msvcr90.dllmsvcp90.dll9.0.21022.8版本的再發行組件包可以從微軟網站here下載。這將幫助PyInstaller找到它想要的版本,並將它們包含在生成的可執行文件中。有趣的是,我能夠運行PyInstaller編譯的可執行文件,安裝了可再發行版本9.0.30729.6161,它只是不會打包這些dll。我試圖將msvc*90.dll的文件複製到dist目錄中,甚至嘗試創建和修改清單文件,但最後我仍然從python27.dll得到一個錯誤。安裝任何版本的VC++ redistributable都可以解決這個問題,但是我的軟件包不會自包含。我希望我能更好地理解這裏究竟發生了什麼......