Я пытаюсь использовать 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
Я видел эту проблему, когда пакет собирался на Vista, но выполнялся на XP. Проблема оказалась в том, что py2exe ошибочно добавили powrprof.dll
и mswsock.dll
в пакет. Однако Windows XP содержит свои собственные копии этих файлов, и не может загрузить Vista, которые были установлены вместе с вашим приложением.
Удаление их из пакета сделало трюк, вы можете сделать это легко, добавив это в опции диктата в установке
. py
'dll_excludes': [ "mswsock.dll", "powrprof.dll" ]
Попробуйте добавить 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 ...