我正在尝试将简单的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)”问题
答案 0 :(得分:20)
我最近安装了Anaconda,部分原因是因为我需要win32com软件包,并且不想排除dll文件。但是,同样的问题对我来说。
解决方案是复制DLL文件:
pywintypes27.dll
pythoncom27.dll
坐在:
C:\蟒蛇\ LIB \站点包\ win32的
到
C:\阿纳康达\ LIB \站点包\ WIN32 \ lib中
因为查找这些文件的函数看起来不在上面的目录中。源文件pywintypes.py中的大量注释显示存在此问题,可能是由于安装过程不同。 我在Anaconda问题跟踪器here上发布了一个问题。
答案 1 :(得分:1)
这是我每天用来将控制台python app打包到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'的内容。它是否引用了一些特殊的第三方库?
答案 2 :(得分: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
答案 3 :(得分: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
在修复此问题之前,请尝试此方法。