2013-10-09 19 views
10

Próbuję przekonwertować prosty skrypt w języku Python do pliku wykonywalnego systemu Windows. Mój skrypt setup.py to:py2exe - Brak modułu systemowego "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'] 
) 

Dodałem dll_excludes, ponieważ każda z nich spowodowała awarię. Teraz trafiłem na niepowodzenie, którego nie mogę po prostu wykluczyć. To jest ślad błędu:

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) 

mam zainstalowane pywin32 i próbowali wyłączeniem "pywintypes27.dll", "pywintypes", "pywin", "pywin.debugger" w moich opcji konfiguracyjnych, ale bez powodzenia. Próbowałem również zastosować wszystkie inne rozwiązania znalezione na SO, takie jak przenoszenie "pythoncom27.dll", "pythoncomloader27.dll" i "pywintypes27.dll" do katalogu najwyższego poziomu.

Nic wyeliminował "ImportError: No module system 'pywintypes' (pywintypes27.dll)" problem

+0

sam problem tutaj, podczas próby użycia pywin32. może jest to związane z anakondą, więc dodaję ten tag. Być może lista mailingowa anakonda byłaby lepszym miejscem na to pytanie (niestety nie używają stackoverflow lub trackera problemów w gihubie na takie pytania/błędy). – bmu

+1

Działa dobrze dla mnie z Anaconda-1.7.0-Windows-x86_64.exe i py2exe-0.6.10dev.win-amd64-py2.7.exe. – cgohlke

+0

Spróbuj przełączyć się do PyInstaller. To jest świetne. – cdonts

Odpowiedz

1

Oto fragment kodu z mojego codziennego użytku na pakiet Pythona konsoli aplikację exe. Działa dobrze.

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

Powinieneś sprawdzić zawartość swojego "simple_script.py". Czy odwołuje się do jakiejś specjalnej biblioteki strony trzeciej?

20

Niedawno zainstalowałem Anacondę, częściowo dlatego, że potrzebuję pakietu win32com i nie chcę wykluczać plików dll. Jednak ten sam problem dla mnie.

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

Ponieważ funkcja szukająca tych plików wygląda tam, ale nie w powyższym katalogu. Wiele komentarzy w pliku źródłowym pywintypes.py ujawnia, że ​​były z tym problemy, prawdopodobnie ze względu na różne procedury instalacji. Napisałem problem w sprawie śledzenia problemów Anaconda here.

+0

To działało dla mnie, ale odpowiednie biblioteki DLL były w 'C: \ Users \ Bob \ AppData \ Local \ Continuum \ Anaconda \ Lib \ site-packages \ win32 \ lib' –

+0

Na Anacondzie Python 3.4 pliki są pywintypes34.dll i pythoncom34.dll i znalazłem je w [moim folderze Anaconda] \ Lib \ site-packages \ pywin32_system32. Próbuję uzyskać py2exe działa na python3 ... – flutefreak7

1

Miałem inny problem z py2exe, który nie znalazł pywintypes27.dll - nie znalazł pliku wewnątrz pliku build_exe.isSystemDLL. Rozwiązaniem jest dodanie lokalizację DLL w ścieżce (przynajmniej hack to zrobić):

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

Jest podobny problem tutaj: https://github.com/ContinuumIO/anaconda-issues/issues/37. Widzę, że używasz Anacondy i myślę, że to jest problem z anakondą i interpreterem pytonów.

Zasadniczo problem nie występuje podczas korzystania z interpretera IPython! Spróbuj na przykład:

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) 

Z drugiej strony, spróbuj

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

żaden problem przy korzystaniu ipython!

Syn aż ten zostanie rozwiązany, można uruchamiać kłopotliwych plików .py pomocą tłumacza ipython zamiast np:

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

i że powinno działać. Należy oddzielić argumenty, które chcesz przekazać do skryptu z poleceniem przez --, inaczej ipython może próbować go analizować, np Zastosowanie:

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

Dopóki ta jest stała, spróbować tej metody.