Modulefinder
其用于确定依赖模块被 “混乱” 和叔嗨你需要Tkinter
。
如果运行下面的脚本...
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script('test.py')
print finder.report()
...你会看到发现模块(缩短):
Name File
---- ----
m BaseHTTPServer C:\Python27\lib\BaseHTTPServer.py
m ConfigParser C:\Python27\lib\ConfigParser.py
m FixTk C:\Python27\lib\lib-tk\FixTk.py
m SocketServer C:\Python27\lib\SocketServer.py
m StringIO C:\Python27\lib\StringIO.py
m Tkconstants C:\Python27\lib\lib-tk\Tkconstants.py
m Tkinter C:\Python27\lib\lib-tk\Tkinter.py
m UserDict C:\Python27\lib\UserDict.py
m _LWPCookieJar C:\Python27\lib\_LWPCookieJar.py
...
所以,现在我们知道,Tkinter
是进口的,但它是不是很有用。该报告没有显示什么是违规模块。然而,这是足够的信息通过修改py2exe脚本排除Tkinter
:
from distutils.core import setup
import py2exe
setup(script_args = ['py2exe'],
windows=[{'script':'test.py'}],
options = {'py2exe': {'compressed':1,
'bundle_files': 1,
'excludes': ['Tkconstants', 'Tkinter']
},
},
zipfile = None)
通常是不够的。如果你仍然好奇哪些模块是有问题的,ModuleFinder
没什么帮助。但您可以安装modulegraph
及其依赖altgraph
。然后你可以运行下面的脚本,并将输出重定向到一个HTML文件:
import modulegraph.modulegraph
m = modulegraph.modulegraph.ModuleGraph()
m.run_script("test.py")
m.create_xref()
您将获得依赖关系图,在那里你会发现:
numpy -> numpy.lib -> numpy.lib.utils -> pydoc -> Tkinter
谢谢回答。更一般的情况是:即使使用* Tkinter软*,您是否认为在使用'py2exe'时可以避免使用'tcl /'文件夹? – Basj
我不确定,因为我使用'cx_freeze'而不是'py2exe',它没有“绑定到一个exe”选项。理论上你应该能够打包所有的文件,甚至在'exe文件里面'Tkinter'所需的'/ tcl'目录。 – Fenikso
应该有'bundle_files'选项可用于'py2exe'。可能对此有所帮助。 – Fenikso