Программа не работает дальше py2exe

Мой код работал хорошо, когда я использовал необработанный файл py. Но когда я скомпилировал с помощью py2exe, он сбросит AttributeError:

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__'

Когда я перенес свой код на версию 2.7, он будет работать хорошо, но на winpe10 (среда предустановки Windows, очень тонкая версия win10) возникает та же ошибка. На winpe 5 (это тонкая версия win8.1) тоже работает.
Мой пример кода:

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])

Основные настройки py2exe:

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

sys.argv.append('py2exe')

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

Пробные версии:

  • питон 2.7.11, 2.7.12, 3.4.4
  • py2xe: 0.6.9, 0.9.2.2
  • pywin32: 219, 220
  • WMI: 1.4.9

Резюме: Как правильно использовать модуль wmi с py2exe?


person Döme    schedule 15.08.2016    source источник
comment
Вы пробовали python-2.7.11.amd64.msi + py2exe-0.6.9.win64-py2.7.amd64.exe + pywin32-219.win-amd64-py2.7.exe?   -  person barak manos    schedule 15.08.2016
comment
@barakmanos Конечно! Я обратил внимание на архитектуру!   -  person Döme    schedule 15.08.2016


Ответы (1)


Так как я сделал явно переустановку python 2.7 (ну и естественно нужные модули), то на моей винде 10 все работает, однако на винпе 10 все равно нет!

Пришлось добавить пакеты wmi в образ winpe, предыдущая версия winpe содержит его по умолчанию! Теперь работает и на винпе.
(Я не могу этого понять. Насколько я знаю, wmi — один из наиболее часто используемых инструментов в winpe!)

С помощью этих двух строк команды:

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"
person Döme    schedule 20.08.2016