Py2exe - Нет системных модулей 'pywintypes'

Я пытаюсь преобразовать простой Python script в исполняемый файл Windows. Моя setup.py script:

from distutils.core import setup
import py2exe

setup(
    name = "Simple Script",
    options = {
        "py2exe": {
            "dll_excludes" : ["libmmd.dll","libifcoremd.dll","libiomp5md.dll","libzmq.dll"]
        }
    },
    console=['simple_script.py']
)

Я добавил dll_excludes, поскольку каждый из них вызвал сбой. Теперь я попал в неудачу, которую я не могу просто исключить. Это трассировка ошибок:

Traceback (most recent call last):
  File "setup.py", line 12, in <module>
    console=['rules signed.py']
  File "C:\Anaconda\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "C:\Anaconda\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "C:\Anaconda\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Anaconda\lib\site-packages\py2exe\build_exe.py", line 243, in run
    self._run()
  File "C:\Anaconda\lib\site-packages\py2exe\build_exe.py", line 306, in _run
    self.plat_finalize(mf.modules, py_files, extensions, dlls)
  File "C:\Anaconda\lib\site-packages\py2exe\build_exe.py", line 1157, in plat_finalize
    import pythoncom
  File "C:\Anaconda\lib\site-packages\pythoncom.py", line 2, in <module>
    import pywintypes
  File "C:\Anaconda\lib\site-packages\win32\lib\pywintypes.py", line 124, in <module>
    __import_pywin32_system_module__("pywintypes", globals())
  File "C:\Anaconda\lib\site-packages\win32\lib\pywintypes.py", line 98, in __import_pywin32_system_module__
    raise ImportError("No system module '%s' (%s)" % (modname, filename))
ImportError: No system module 'pywintypes' (pywintypes27.dll)

Я установил pywin32 и попытался исключить "pywintypes27.dll", "pywintypes", "pywin", "pywin.debugger" в моих настройках, без каких-либо успехов. Также попытался применить все другие решения, которые я нашел на SO, например, перемещение "pythoncom27.dll", "pythoncomloader27.dll" и "pywintypes27.dll" в каталог верхнего уровня.

Ничего не устранило проблему "pywintypes" (pywintypes27.dll) "ImportError: No system module"

Ответ 1

Недавно я установил Anaconda, отчасти потому, что мне нужен пакет win32com и не хочу исключать DLL файлы. Однако для меня такая же проблема.

Решение должно было скопировать файлы DLL:
pywintypes27.dll
pythoncom27.dll
сидя в:
C:\Anaconda\Lib\сайт-пакеты\win32
для изображения C:\Anaconda\Lib\сайт-пакеты\win32\Lib

Поскольку функция, ищущая эти файлы, выглядит там, но не в каталоге выше. Много комментариев в исходном файле pywintypes.py показывает, что с этим были проблемы, возможно, из-за разных процедур установки. Я опубликовал проблему с отслеживателем проблемы Anaconda здесь.

Ответ 2

Вот фрагмент кода моего ежедневного использования, чтобы упаковать консольное приложение python в exe. Он отлично работает.

from distutils.core import setup
import py2exe
from glob import glob

data_files = [("Microsoft.VC90.CRT",
              glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*')), 
             ... other required files]
py2exe_options={"py2exe":{"includes":[some_thing_need_to_included], 
                          "dll_excludes":[some_thing_need_to_exclude]}}
setup(data_files=data_files, 
      options=py2exe_options,
      console=['aim_python_script.py'])

Вы должны проверить содержимое своего "simple_script.py". Описывает ли это ссылку на специальную стороннюю библиотеку?

Ответ 3

У меня возникла другая проблема с тем, что py2exe не смог найти pywintypes27.dll - он не смог найти файл внутри build_exe.isSystemDLL. Решение состоит в том, чтобы добавить расположение DLL в пути (по крайней мере, взлом должен сделать это):

import site
for site_path in site.getsitepackages():
    pywin32_path = os.path.join(site_path, "pywin32_system32")
    if os.path.isdir(pywin32_path):
        os.environ["PATH"] = os.environ["PATH"] + ";" + pywin32_path

Ответ 4

Здесь есть аналогичная проблема: https://github.com/ContinuumIO/anaconda-issues/issues/37. Я вижу, что вы используете Anaconda, и я думаю, что это проблема с анакондой и интерпретатором python.

По сути, проблема не возникает при использовании интерпретатора IPython! Попробуйте, например:

C:\...\User> python
>>>import pythoncom
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Anaconda3\lib\site-packages\pythoncom.py", line 2, in <module>
    import pywintypes
  File "C:\Program Files\Anaconda3\lib\site-packages\win3\lib\pywintypes.py", line 124, in <module>
    __import_pywin32_system_module__("pywintypes", globals())
  File "C:\Program Files\Anaconda3\lib\site-packages\win32\lib\pywintypes.py", line 98, in __import_pywin32_system_module__
raise ImportError("No system module '%s' (%s)" % (modname, filename))
ImportError: No system module 'pywintypes' (pywintypes34.dll)

С другой стороны, попробуйте

C:\...\User> ipython
In [1]: import pythoncom

In [2]: pythoncom
Out[2]: <module 'pythoncom' from 'C:\\Program Files\\Anaconda3\\lib\\site-packages\\win32\\pythoncom34.dll'>

Нет проблем при использовании IPython!

Сын, пока это не будет исправлено, вы можете запустить свои неприятные .py файлы, используя интерпретатор IPython, например:

C:\...\User> ipython setup.py

и это должно сработать. Вы должны отделить аргументы, которые хотите передать в script из команды --, в противном случае IPython может попытаться ее проанализировать, например:

C:\...\User> ipython setup.py -- arg1 arg2

Пока это не исправлено, попробуйте этот метод.