【问题标题】:py2exe - No system module 'pywintypes'py2exe - 没有系统模块'pywintypes'
【发布时间】:2013-10-17 08:02:47
【问题描述】:

我正在尝试将简单的 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,因为它们中的每一个都导致了失败。现在我遇到了一个我不能简单排除的失败。这是错误跟踪:

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 邮件列表是一个更好的地方来询问这个问题(不幸的是,他们不使用 stackoverflow 或 gihub 的问题跟踪器来解决此类问题/错误)。
  • 对我来说适用于 Anaconda-1.7.0-Windows-x86_64.exe 和 py2exe-0.6.10dev.win-amd64-py2.7.exe。
  • 尝试切换到 PyInstaller。太棒了。

标签: python windows py2exe pywin32 anaconda


【解决方案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

在解决此问题之前,请尝试此方法。

【讨论】:

    【解决方案2】:

    我遇到了另一个问题,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
    

    【讨论】:

      【解决方案3】:

      我最近安装了 Anaconda,部分原因是我需要 win32com 包,并且不想排除 dll 文件。但是,对我来说同样的问题。

      解决方案是复制 DLL 文件:
      pywintypes27.dll
      pythoncom27.dll
      坐在:
      C:\Anaconda\Lib\site-packages\win32

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

      因为查找这些文件的函数在上面的目录中而不是在上面的目录中查找。源文件 pywintypes.py 中的许多 cmets 表明存在此问题,可能是由于不同的安装过程。 我在 Anaconda 问题跟踪器 here 上发布了一个问题。

      【讨论】:

      • 这对我有用,但相关的 DLL 在 C:\Users\Bob\AppData\Local\Continuum\Anaconda\Lib\site-packages\win32\lib
      • 在 Anaconda Python 3.4 上,文件是 pywintypes34.dll 和 pythoncom34.dll,我在 [我的 Anaconda 文件夹]\Lib\site-packages\pywin32_system32 中找到了它们。我正在尝试让 py2exe 在 python3 上运行 ...
      【解决方案4】:

      这是我日常使用的一个代码sn-p,用于将控制台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”的内容。它是否引用了一些特殊的第三方库?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        相关资源
        最近更新 更多