2014-09-29 363 views
1

好的,我需要pyinstaller和PythonNet的一些幫助。PyInstaller和PythonNet CLR

這是我第一次發佈到論壇,我對編碼相對缺乏經驗,但我一直在學習一個GUI開發的小python。我有一個腳本,它使用.NET dll庫與USB攝像頭進行交互。該腳本在Python中正確運行,但我試圖通過Pyinstaller將它編譯爲.exe,我陷入困境。

這裏是代碼的前幾行:

import os 
import clr 
import sys 
import System 
from System import IntPtr 

而這裏的運行編譯後的.exe文件後錯誤:

未處理的異常:System.IO.FileLoadException:無法加載文件或集合 y'Python.Runtime,Version = 4.0.0.1,Culture = neutral,PublicKeyToken = 5000fea6cba7 02dd'或其依賴項之一。找到的程序集的清單定義doe s與程序集引用不匹配。 (從HRESULT異常:0x80131040) 在System.Reflection.RuntimeAssembly._nLoad(的AssemblyName文件名,字符串鱈 EBASE,證據assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark & stackMark,IntPtr的pPrivHostBinder,布爾throwOnFileNotFound,布爾forIntro spection,布爾suppressSecurityChecks) 在System.Reflection.RuntimeAssembly.nLoad(的AssemblyName文件名,字符串代碼 基地證據assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark &小號 tackMark,IntPtr的pPrivHostBinder,布爾throwOnFileNotFound,布爾forIntros pection,布爾suppressSecurityChecks) 在的System.Reflection。 RuntimeAssembly.InternalL oadAssemblyName(如的AssemblyName semblyRef,證據assemblySecurity,RuntimeAssembly reqAssembly,StackCrawlMar ķ& stackMark,IntPtr的pPrivHostBinder,布爾throwOnFileNotFound,布爾forIn trospection,布爾suppressSecurityChecks) 在System.Reflection.Assembly.Load(的AssemblyName assemblyRef) 在clrModule。 initclr()

我覺得跟python.runtime的問題是類似的一個張貼在這裏(https://github.com/pythonnet/pythonnet/issues/34),但我一直在嘗試,推薦的解決方案,我仍然得到同樣的錯誤。即我卸載pythonnet,然後搜索並刪除任何剩餘的clr.pyd或python.runtime.dll文件。然後通過在命令提示符下使用PIP重新安裝:

「點子安裝 - 事先pythonnet」

編譯我的劇本後,python.runtime.dll出現在「DIST」文件夾一起該exe文件。但版本號有些奇怪。右鍵單擊dll並在窗口中查看「屬性」,將版本列爲2.0.0.2,但查看程序集信息(使用dotPeek),它將其列爲4.0.0.1。這裏發生了什麼?

下面是表示版本差異的屏幕截圖:

dll assembly screenshot shows version 4.0.0.1

[窗口屬性,屏幕截圖顯示版本2.0.0。2]

imagizer.imageshack.us/v2/381x520q90/902/6DEzLM.jpg (對不起,我不能讓這一個鏈接)

請注意我正在Python 2.7版(32位位)在Windows 7(64位)上。另外,最初我在編譯時遇到了一個錯誤,因爲Pyinstaller無法找到CLR需要的python.runtime.dll,但是我修改了clr-hook.py以包含完整的dll路徑,所以現在它編譯時沒有錯誤,仍然顯然不對。這裏是新的掛鉤:

##hook-clr.py 

    import ctypes.util 
    datas = [(ctypes.util.find_library('C:\\Python27\\lib\\site-packages\\Python.Runtime'), '')] 

而這裏的編譯過程中pyinstaller的輸出:

C:\Users\M80\Desktop\RealTimeBeamAnalysis> pyinstaller Realtime_3_exec.py 

219 INFO: wrote C:\Users\M80\Desktop\RealTimeBeamAnalysis\Realtime_3_exe 
c.spec 
263 INFO: Testing for ability to set icons, version resources... 
455 INFO: ... resource update available 
462 INFO: UPX is not available. 
516 INFO: Processing hook hook-os 
697 INFO: Processing hook hook-time 
703 INFO: Processing hook hook-cPickle 
804 INFO: Processing hook hook-_sre 
986 INFO: Processing hook hook-cStringIO 
1118 INFO: Processing hook hook-encodings 
1137 INFO: Processing hook hook-codecs 
2354 INFO: Processing hook hook-httplib 
2360 INFO: Processing hook hook-email 
2519 INFO: Processing hook hook-email.message 
2970 INFO: Processing hook hook-clr 
3061 WARNING: library python%s%s required via ctypes not found 
3298 INFO: Extending PYTHONPATH with C:\Users\M80\Desktop\RealTimeBeamAn 
alysis 
3299 INFO: checking Analysis 
3299 INFO: building Analysis because out00-Analysis.toc non existent 
3299 INFO: running Analysis out00-Analysis.toc 
3299 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable 

3393 INFO: Searching for assembly x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21 
022.8_none ... 
3394 INFO: Found manifest C:\Windows\WinSxS\Manifests\x86_microsoft.vc90.crt_1fc 
8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91.manifest 
3413 INFO: Searching for file msvcr90.dll 
3414 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_ 
9.0.21022.8_none_bcb86ed6ac711f91\msvcr90.dll 
3414 INFO: Searching for file msvcp90.dll 
3414 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_ 
9.0.21022.8_none_bcb86ed6ac711f91\msvcp90.dll 
3416 INFO: Searching for file msvcm90.dll 
3416 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_ 
9.0.21022.8_none_bcb86ed6ac711f91\msvcm90.dll 
3541 INFO: Analyzing C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_-py2.7.e 
gg\PyInstaller\loader\_pyi_bootstrap.py 
3562 INFO: Processing hook hook-os 
3582 INFO: Processing hook hook-site 
3608 INFO: Processing hook hook-encodings 
3748 INFO: Processing hook hook-time 
3752 INFO: Processing hook hook-cPickle 
3840 INFO: Processing hook hook-_sre 
3996 INFO: Processing hook hook-cStringIO 
4131 INFO: Processing hook hook-codecs 
4654 INFO: Processing hook hook-httplib 
4657 INFO: Processing hook hook-email 
4799 INFO: Processing hook hook-email.message 
5021 INFO: Processing hook hook-clr 
5094 WARNING: library python%s%s required via ctypes not found 
5378 INFO: Processing hook hook-pydoc 
5513 INFO: Analyzing C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_-py2.7.e 
gg\PyInstaller\loader\pyi_importers.py 
5680 INFO: Analyzing C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_-py2.7.e 
gg\PyInstaller\loader\pyi_archive.py 
5831 INFO: Analyzing C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_-py2.7.e 
gg\PyInstaller\loader\pyi_carchive.py 
5963 INFO: Analyzing C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_-py2.7.e 
gg\PyInstaller\loader\pyi_os_path.py 
5982 INFO: Analyzing Realtime_3_exec.py 
6026 INFO: Processing hook hook-PyQt4 
6038 INFO: Processing hook hook-PyQt4.QtCore 
6322 INFO: Processing hook hook-PyQt4.QtGui 
8180 INFO: Processing hook hook-matplotlib 
8298 INFO: Processing hook hook-PIL 
8386 INFO: Processing hook hook-PIL.Image 
9391 INFO: Processing hook hook-distutils 
9837 INFO: Processing hook hook-parser 
10396 INFO: Processing hook hook-sysconfig 
10493 INFO: Processing hook hook-xml 
10580 INFO: Processing hook hook-xml.sax 
10618 INFO: Processing hook hook-pyexpat 
11866 INFO: Processing hook hook-setuptools 
12416 INFO: Processing hook hook-win32com 
12434 INFO: Processing hook hook-win32com.client 
12562 INFO: Processing hook hook-pythoncom 
12647 INFO: Processing hook hook-pywintypes 
12771 INFO: Processing hook hook-win32ui 
13937 INFO: Processing hook hook-scipy.special._ufuncs 
13979 INFO: Processing hook hook-Image 
14680 INFO: Processing hook hook-pycparser 
15338 INFO: Processing hook hook-PIL.SpiderImagePlugin 
15522 INFO: Processing hook hook-_tkinter 
15863 INFO: checking Tree 
15865 INFO: building because out00-Tree.toc missing or bad 
15866 INFO: building Tree out00-Tree.toc 
16239 INFO: checking Tree 
16240 INFO: building because out01-Tree.toc missing or bad 
16241 INFO: building Tree out01-Tree.toc 
16338 INFO: Processing hook hook-scipy.sparse.csgraph 
18598 INFO: Processing hook hook-pytz 
C:\Python27\lib\site-packages\matplotlib\backends\backend_qt.py:11: MatplotlibDe 
precationWarning: QT3-based backends are deprecated and will be removed after th 
e v1.2.x release. Use the equivalent QT4 backend instead. 
    mplDeprecation) 
33262 INFO: Processing hook hook-matplotlib.backends 
34985 INFO: Processing hook hook-PyQt4.QtOpenGL 
34990 INFO: Processing hook hook-PyQt4.QtSvg 
35388 INFO: Processing hook hook-anydbm 
36676 INFO: Processing hook hook-h5py 
40292 INFO: Processing hook hook-IPython 
46546 INFO: Processing hook hook-OpenGL 
47113 INFO: Processing hook hook-OpenGL_accelerate 
49549 INFO: Processing hook hook-zmq 
50545 INFO: Processing hook hook-xml.dom 
50582 INFO: Processing hook hook-xml.dom.domreg 
55157 INFO: Processing hook hook-docutils 
56850 INFO: Processing hook hook-pygments 
57268 INFO: Processing hook hook-pygments.lexers 
57973 INFO: Processing hook hook-pygments.formatters 
58388 INFO: Processing hook hook-pygments.styles 
60513 INFO: Processing hook hook-sqlite3 
62490 INFO: Processing hook hook-lxml.etree 
62500 INFO: Processing hook hook-xml.etree.cElementTree 
62529 INFO: Processing hook hook-_elementtree 
63798 INFO: Hidden import 'codecs' has been found otherwise 
63799 INFO: Hidden import 'encodings' has been found otherwise 
63799 INFO: Looking for run-time hooks 
63805 INFO: Analyzing rthook C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_ 
-py2.7.egg\PyInstaller\loader\rthooks\pyi_rth_pkgres.py 
64029 INFO: Analyzing rthook C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_ 
-py2.7.egg\PyInstaller\loader\rthooks\pyi_rth_Image.py 
64170 INFO: Analyzing rthook C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_ 
-py2.7.egg\PyInstaller\loader\rthooks\pyi_rth_qt4plugins.py 
64285 INFO: Analyzing rthook C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_ 
-py2.7.egg\PyInstaller\loader\rthooks\pyi_rth_mplconfig.py 
64420 INFO: Analyzing rthook C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_ 
-py2.7.egg\PyInstaller\loader\rthooks\pyi_rth_mpldata.py 
64534 INFO: Analyzing rthook C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_ 
-py2.7.egg\PyInstaller\loader\rthooks\pyi_rth_win32comgenpy.py 
64672 INFO: Analyzing rthook C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_ 
-py2.7.egg\PyInstaller\loader\rthooks\pyi_rth_PIL_Image.py 
64797 INFO: Analyzing rthook C:\Python27\lib\site-packages\pyinstaller-2.1.1dev_ 
-py2.7.egg\PyInstaller\loader\rthooks\pyi_rth_Tkinter.py 
70305 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of 
final executable 
73703 INFO: Adding Microsoft.VC90.MFC to dependent assemblies of final executabl 
e 
73792 INFO: Searching for assembly x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.2 
1022.8_none ... 
73792 INFO: Found manifest C:\Windows\WinSxS\Manifests\x86_microsoft.vc90.mfc_1f 
c8b3b9a1e18e3b_9.0.21022.8_none_b81d038aaf540e86.manifest 
73804 INFO: Searching for file mfc90.dll 
73804 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b 
_9.0.21022.8_none_b81d038aaf540e86\mfc90.dll 
73805 INFO: Searching for file mfc90u.dll 
73805 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b 
_9.0.21022.8_none_b81d038aaf540e86\mfc90u.dll 
73805 INFO: Searching for file mfcm90.dll 
73805 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b 
_9.0.21022.8_none_b81d038aaf540e86\mfcm90.dll 
73805 INFO: Searching for file mfcm90u.dll 
73807 INFO: Found file C:\Windows\WinSxS\x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b 
_9.0.21022.8_none_b81d038aaf540e86\mfcm90u.dll 
84271 INFO: Using Python library C:\Windows\system32\python27.dll 
99841 INFO: Warnings written to C:\Users\M80\Desktop\RealTimeBeamAnalysi 
s\build\Realtime_3_exec\warnRealtime_3_exec.txt 
99993 INFO: checking PYZ 
99995 INFO: rebuilding out00-PYZ.toc because out00-PYZ.pyz is missing 
99996 INFO: building PYZ (ZlibArchive) out00-PYZ.toc 
137450 INFO: checking PKG 
137450 INFO: rebuilding out00-PKG.toc because out00-PKG.pkg is missing 
137450 INFO: building PKG (CArchive) out00-PKG.pkg 
137516 INFO: checking EXE 
137518 INFO: rebuilding out00-EXE.toc because Realtime_3_exec.exe missing 
137519 INFO: building EXE from out00-EXE.toc 
137590 INFO: Appending archive to EXE C:\Users\M80\Desktop\RealTimeBeamA 
nalysis\build\Realtime_3_exec\Realtime_3_exec.exe 
137690 INFO: checking COLLECT 
137690 INFO: building COLLECT out00-COLLECT.toc 
+1

你有沒有得到這個工作?我非常想聽聽如何。 – boileau 2015-03-19 11:25:50

+1

我有這個確切的問題,但與py2exe而不是pyInstaller - 任何決議呢? – 2015-06-11 11:16:12

+0

是由PyInstaller生成的dist文件夾中的Python.Runtime.dll? – denfromufa 2016-01-29 06:12:30

回答

2

pull請求被合併爲CLR鉤(pythonnet)到pyinstaller:

https://github.com/pyinstaller/pyinstaller/pull/2048/files

使用此clr鉤子的正確方法是在spec文件中指定命令行中的--hidden-import=clr或指定hiddenimports=['clr']。 這應該照顧爲Windows找到隱藏的導入Python.Runtime.DLL

如果有人願意在Linux或OSX上打包捆綁,請繼續!請注意,Mono未在這些平臺上預安裝,因此捆綁可能會變得非常複雜。