2016-08-15 3 views
0

Mein Code funktioniert gut, wenn ich die rohe Py-Datei verwendet. Aber wenn ich mit py2exe kompiliert, wird ein Attribute fallen:Programm funktioniert nicht über py2exe

File "test.py", line 1, in <module> 
    import wmi 
    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible 
    File "C:\Python34\lib\site-packages\zipextimporter.py", line 86, in load_module 
    return zipimport.zipimporter.load_module(self, fullname) 
    File "C:\Python34\lib\wmi.py", line 88, in <module> 
    from win32com.client import GetObject, Dispatch 
    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible 
    File "C:\Python34\lib\site-packages\zipextimporter.py", line 86, in load_module 
    return zipimport.zipimporter.load_module(self, fullname) 
    File "C:\Python34\lib\site-packages\win32com\__init__.py", line 6, in <module> 
    import pythoncom 
    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible 
    File "C:\Python34\lib\site-packages\zipextimporter.py", line 86, in load_module 
    return zipimport.zipimporter.load_module(self, fullname) 
    File "C:\Python34\lib\site-packages\pythoncom.py", line 3, in <module> 
    pywintypes.__import_pywin32_system_module__("pythoncom", globals()) 
AttributeError: 'module' object has no attribute '__import_pywin32_system_module__' 

Wenn ich meinen Code auf 2,7 zurückportiert, wird es funktionierte gut, aber auf auf winpe10 (Windows Preinstallation Environment, sehr dünne Version von win10) fallen gleichen Error. Auf Winpe 5 (es ist dünne Version von Win8.1) arbeiten auch.
Mein Beispielcode:

import wmi 

def getWmiData(wmiProperty, wmiClass, wmiNamespace='cimv2'): 
    """Return array of strings.""" 
    wmiValues = [] 
    wmiCursore = wmi.GetObject('winmgmts:\\root\\' + wmiNamespace) 
    wmiQuery = 'SELECT ' + wmiProperty + ' FROM ' + wmiClass 
    for item in wmiCursore.ExecQuery(wmiQuery): 
     wmiValues.append(str(item.__getattr__(wmiProperty))) 

    return wmiValues 

print(getWmiData('SystemSKU', 'MS_systeminformation', 'wmi')[0]) 

Grund py2exe Einstellungen:

from distutils.core import setup 
import py2exe, sys, os 

sys.argv.append('py2exe') 

setup(
    options = {'py2exe': {'compressed': True},}, 
    console = ['test.py'], 
) 

Versuchte Versionen:

  • Python 2.7.11, 2.7.12, 3.4.4
  • py2xe: 0.6.9, 0.9.2.2
  • pywin32: 219, 220
  • wmi: 1.4.9

Zusammenfassung: Wie kann ich wmi Modul mit py2exe auf dem richtigen Weg benutzen?

+0

Haben Sie versucht, 'Python-2.7 .11.amd64.msi' + 'py2exe-0.6.9.win64-py2.7.amd64.exe' +' pywin32-219.win-amd64-py2.7.exe'? –

+0

@barakmanos Natürlich! Ich habe auf die Architektur geachtet! –

Antwort

0

Da ich python 2.7 (und natürlich die notwendigen Module) klar neu installiert habe, funktioniert alles auf meinem Windows 10, aber auf der WinPE 10 noch nicht!

Ich musste dem winpe Bild wmi Pakete hinzufügen, die vorherige winpe Version enthält es standardmäßig! Jetzt funktioniert es auch auf winpe.
(. Ich kann es nicht verstehen, wenn ich gut kenne, wmi ist eines der am meisten verwendeten Werkzeug auf WinPE)

Mit diesen beiden Linien-Befehle:

Dism /Add-Package /Image:"C:\WinPE_amd64\mount" /PackagePath:"C:\Program Files\Windows Kits\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-WMI.cab" 
Dism /Add-Package /Image:"C:\WinPE_amd64\mount" /PackagePath:"C:\Program Files\Windows Kits\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-WMI_en-us.cab"