Py2exe - загрузка win32api.pyc ImportError DLL перестала работать

Я пытаюсь использовать py2exe для распределения приложения Python, которое я записал. Все, кажется, идет хорошо, но когда я выполняю его на другой машине, это перестало работать со следующей ошибкой:

Traceback (most recent call last):
  File "application.py", line 12, in <module>
  File "win32api.pyc", line 12, in <module>
  File "win32api.pyc", line 10, in __load
ImportError: DLL load failed: The specified procedure could not be found.

Я погуглил для этого и не нашел очень много, но попробовал следующие предложения напрасно:

Импортированный pywintypes и pythoncom прежде win32api (в setup.py для py2exe и в главном приложении) Добавленный некоторый код к setup.py -

# ModuleFinder can't handle runtime changes to __path__, but win32com uses them
import pywintypes
import pythoncom
import win32api
try:
# if this doesn't work, try import modulefinder
    import py2exe.mf as modulefinder
    import win32com
    for p in win32com.__path__[1:]:
        modulefinder.AddPackagePath("win32com", p)
    for extra in ["win32com.shell"]: #,"win32com.mapi"
        __import__(extra)
        m = sys.modules[extra]
        for p in m.__path__[1:]:
            modulefinder.AddPackagePath(extra, p)
except ImportError:
    # no build path setup, no worries.
    pass

Я довольно плохо знаком со всем этим, таким образом, любая справка значительно ценилась бы

Спасибо

Jon

7
задан 30 December 2009 в 10:32
поделиться

2 ответа

Я видел эту проблему, когда пакет собирался на Vista, но выполнялся на XP. Проблема оказалась в том, что py2exe ошибочно добавили powrprof.dll и mswsock.dll в пакет. Однако Windows XP содержит свои собственные копии этих файлов, и не может загрузить Vista, которые были установлены вместе с вашим приложением.

Удаление их из пакета сделало трюк, вы можете сделать это легко, добавив это в опции диктата в установке . py

 'dll_excludes': [ "mswsock.dll", "powrprof.dll" ]
29
ответ дан 6 December 2019 в 05:55
поделиться

Попробуйте добавить win32api в ваши пакеты, в словаре опций.

Вот пример:

excludes = ["pywin", "pywin.debugger"] # there will be more in real life...
options = dict(optimize=2,
           dist_dir="build",
           excludes=excludes,
           packages=["win32api"]) 
setup(
    name="MyCoolApp",
    options=dict(py2exe=options),
    # etc ...
0
ответ дан 6 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: