我创建了一个使用 pythonnet 的 python 脚本。该脚本位于一个名为main.py
. 当我从命令行运行脚本时(只需main.py
在 Windows 命令提示符下键入),导入的 pythonnet 模块clr
工作正常。但是当我尝试构建一个 exe 时,我收到一条错误消息:No module named clr
.
为了找出造成这种情况的原因,我已经验证了使用 py2exe 构建可执行文件(在我的例子中是一个简单的 Tkinter 应用程序)是可行的。我只安装了 Python 3.4 并验证了where python
指向C:\Python34\python.exe
.
该错误发生在可执行构建时,似乎是通过包含在 my forclr
部分中触发的。完整的回溯如下:{"includes":["sip","clr"]}}
setup.py
py2exe
Traceback (most recent call last):
File "setup.py", line 32, in <module>
windows = [{'script': "main.py"}],
File "C:\Python34\lib\distutils\core.py", line 148, in setup
dist.run_commands()
File "C:\Python34\lib\distutils\dist.py", line 917, in run_commands
self.run_command(cmd)
File "C:\Python34\lib\distutils\dist.py", line 936, in run_command
cmd_obj.run()
File "C:\Python34\lib\site-packages\py2exe\distutils_buildexe.py", line 188, i
n run
self._run()
File "C:\Python34\lib\site-packages\py2exe\distutils_buildexe.py", line 267, i
n _run
builder.analyze()
File "C:\Python34\lib\site-packages\py2exe\runtime.py", line 164, in analyze
mf.import_hook(modname)
File "C:\Python34\lib\site-packages\py2exe\mf3.py", line 120, in import_hook
module = self._gcd_import(name)
File "C:\Python34\lib\site-packages\py2exe\mf3.py", line 273, in _gcd_import
raise ImportError('No module named {!r}'.format(name), name=name)
ImportError: No module named 'clr'
我还阅读/尝试了这些:
https://docs.python.org/2/distutils/setupscript.html
https://pythonhosted.org/setuptools/setuptools.html
http://sourceforge.net/p/py2exe/mailman/message/6937658
引导我移动clr.pyd
并Python.Runtime.dll
进入不同的位置main.py
,包括 , 的位置C:\Python34\Lib\site-packages
(它们最初所在的位置)和C:\Python34\Lib\site-packages\py2exe
这些都没有奏效,我不知道下一步该尝试什么。我可以看到由于某种原因py2exe
找不到任何一个clr.pyd
或Python.Runtime.dll
两个,但看不到原因。有没有人有任何想法?
代码详情
我的main.py
脚本如下所示:
import clr
clr.AddReference("name.xxxx")
from name.xxxx import aaa
from clr import System
# All my functioning code, that I've verified works when run from the command line
这是我的setup.py
文件包含的内容(我留下了一些注释,以便您可以看到我尝试过的内容):
from distutils.core import setup
import py2exe, sys, os
mydata_files = []
for files in os.listdir('C:\\d\\Project\\TOOLS\\data_acquisition\\trunk\\DLL'):
f1 = 'C:\\d\\Project\\TOOLS\\data_acquisition\\trunk\\DLL\\' + files
if os.path.isfile(f1): # skip directories
f2 = '.', [f1]
mydata_files.append(f2)
setup(
data_files=mydata_files,
# options = {"py2exe" : {"includes" : "module1,module2,module3"}}
options = {"py2exe": {"includes":["sip", "clr"]}},
# options = {'py2exe': {'bundle_files': 1 , 'compressed': True,"includes":["sip"]}},
#python setup.py py2exe
#CLR.dll and PythonRuntime.dll
# options = {'py2exe': {'bundle_files': 1, "skip_archive":1 ,"includes":["sip"]}},
windows = [{'script': "main.py"}],
# data_files=mydata_files,
# zipfile = None
)
如果我将行更改options = {"py2exe": {"includes":["sip", "clr"]}},
为options = {"py2exe": {"includes":["sip"]}},
然后.exe
构建,但显然无法正常运行。