py2exe - 没有系统模块'pywintypes'。

11

我正在尝试将一个简单的Python脚本转换为Windows可执行文件。 我的setup.py脚本如下:

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,因为每个dll都导致了失败。现在我遇到了一个我不能简单地排除的故障。以下是错误跟踪:

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: No system module 'pywintypes' (pywintypes27.dll)"问题。

同样的问题在这儿,当尝试使用pywin32时。也许与anaconda相关,因此我添加了这个标签。也许anaconda邮件列表是问这个问题(不幸的是,他们没有在gihub上使用stackoverflow或问题跟踪器来处理这类问题/错误)的更好地方。 - bmu
1
我使用Anaconda-1.7.0-Windows-x86_64.exe和py2exe-0.6.10dev.win-amd64-py2.7.exe都可以正常工作。 - cgohlke
试着切换到 PyInstaller。它非常优秀。 - cdonts
4个回答

20

我最近安装了Anaconda,部分原因是因为我需要win32com软件包,而且不想排除dll文件。然而,我也遇到了同样的问题。

解决方法是复制以下DLL文件:
pywintypes27.dll
pythoncom27.dll
它们位于:
C:\ Anaconda \ Lib \ site-packages \ win32

C:\ Anaconda \ Lib \ site-packages \ win32 \ lib中。

因为函数正在寻找这些文件,但不在上面的目录中。pywintypes.py源文件中有许多注释表明存在此类问题,可能是由于不同的安装程序引起的。我在Anaconda问题跟踪器这里发布了一个问题。


这对我有用,但相关的DLL文件在C:\ Users \ Bob \ AppData \ Local \ Continuum \ Anaconda \ Lib \ site-packages \ win32 \ lib中。 - Matt R
在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文件的位置添加到路径中(至少这是一种hack方法):

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,我认为这是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时没有问题!

直到这个问题被修复之前,你可以使用IPython解释器来运行你的有问题的.py文件,例如:

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

这样应该能够正常工作。您应该使用 -- 将要传递给脚本的参数与命令分开,否则 IPython 可能会尝试解析它,例如使用:

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

直到这个问题被修复,尝试使用这种方法。

1

这是我日常使用的代码片段,用于将控制台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'文件的内容。它是否引用了某些特殊的第三方库?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接