我试图将一个简单的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”,但没有成功。 也尝试应用我发现的所有其他解决scheme,如移动“pythoncom27.dll”,“pythoncomloader27.dll”和“pywintypes27.dll”到顶级目录。
没有任何东西消除了“ImportError:No system module pywintypes(pywintypes27.dll)”问题
我最近安装了Anaconda,部分原因是我需要win32com软件包,而不想排除dll文件。 不过,同样的问题对我来说。
解决方案是复制DLL文件:
pywintypes27.dll
pythoncom27.dll
坐在:
C:\蟒蛇\ LIB \站点包\ WIN32
至
C:\蟒蛇\ LIB \站点包\ WIN32 \ LIB
因为查找这些文件的函数看起来在那里,但不在上面的目录中。 源文件pywintypes.py中的大量注释揭示了这个问题,可能是由于不同的安装过程。 我在这里发布了一个关于Anaconda问题跟踪器的问题 。
这里是我日常使用的包装控制台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'的内容。 它是否引用一些特殊的第三方库?
我有一个不同的问题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
这里也有类似的问题: 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
在这个问题解决之前,试试这个方法。