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
импортируется, но не очень полезно. В отчете не указано, что является нарушающим модулем. Тем не менее, это достаточно информации, чтобы исключить Tkinter
путем изменения py2exe сценария:
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', вы думаете, что можно избежать' tcl/'при использовании' py2exe'? – Basj
Я не уверен, поскольку я использую 'cx_freeze', а не' py2exe', который не имеет опции «bundle to one exe». Теоретически вы должны иметь возможность упаковывать все файлы, даже '/ tcl', которые нужны директорию' Tkinter' внутри exe. – Fenikso
Для 'py2exe' должна быть опция' bundle_files'. Может быть полезно для этого. – Fenikso