2013-10-09 3 views
10

Я пытаюсь преобразовать простой скрипт Python в исполняемый файл Windows. Мой setup.py скрипт:py2exe - Нет системных модулей 'pywintypes'

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» в каталог верхнего уровня.

Ничто не устранило «ImportError: Ни один из модулей системы„pywintypes“(pywintypes27.dll)» Проблема

+0

такой же проблема здесь, при попытке использовать pywin32. возможно, это анаконда, поэтому я добавляю этот тег. Возможно, список рассылки anaconda будет лучшим местом, чтобы спросить об этом (к сожалению, они не используют stackoverflow или трекер проблем в gihub для таких вопросов/ошибок). – bmu

+1

Работает нормально для меня с Anaconda-1.7.0-Windows-x86_64.exe и py2exe-0.6.10dev.win-amd64-py2.7.exe. – cgohlke

+0

Попробуйте переключиться на PyInstaller. Это отлично. – cdonts

ответ

1

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

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». Описывает ли это ссылку на специальную стороннюю библиотеку?

20

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

Solution was to copy the DLL files:
pywintypes27.dll
pythoncom27.dll
sitting in:
C:\Anaconda\Lib\site-packages\win32
to
C:\Anaconda\Lib\site-packages\win32\lib

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

+0

Это сработало для меня, но соответствующие DLL-файлы были в папке «C: \ Users \ Bob \ AppData \ Local \ Continuum \ Anaconda \ Lib \ site-packages \ win32 \ lib' –

+0

На Anaconda Python 3.4 файлы - pywintypes34.dll и pythoncom34.dll, и я нашел их в папке Anaconda \ Lib \ site-packages \ pywin32_system32. Я пытаюсь заставить py2exe работать на python3 ... – flutefreak7

1

У меня была другая проблема с 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 
1

Существует аналогичный вопрос здесь: 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 

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

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

До этого фиксировано, попробуйте этот метод.