У меня недавно была такая же проблема при использовании nuitka.Я решил эту проблему, добавив свою собственную логику, копируя отсутствующие части TK / TCL:
import sys, os, subprocess, shutil
pscript = sys.argv[1]
pscript_n = pscript[:-3]
EXE = pscript_n + ".exe"
if not os.path.exists(pscript):
raise SystemExit("Python source '%s' does not exist!" % pscript)
tk = os.path.join(sys.exec_prefix,"tcl", "tk8.6")
tcl = os.path.join(sys.exec_prefix,"tcl", "tcl8.6")
if not os.path.exists(tk):
raise SystemExit("unexpected: '%s' does not exist!" % tk)
if not os.path.exists(tcl):
raise SystemExit("unexpected: '%s' does not exist!" % tcl)
dist_path = os.path.join("compiled", pscript_n + ".dist")
if os.path.exists(dist_path):
print("removing old binaries ...")
shutil.rmtree(dist_path, ignore_errors=True)
if not os.path.exists("compiled"):
print("creating 'compiled' sub dir ...")
os.mkdir("compiled")
os.mkdir(os.path.join("compiled", "lib"))
os.mkdir(os.path.join("compiled", "bin"))
tar_tk = os.path.join("compiled", "lib", "tk8.6")
tar_tcl = os.path.join("compiled", "lib", "tcl8.6")
shutil.copytree(tk, tar_tk)
shutil.copytree(tcl, tar_tcl)
print("'compiled' sub dir created")
print("Next messages are from Nuitka compilation.\n")
cmd = "python -m nuitka --portable --remove-output --output-dir=compiled " + pscript
subprocess.call(cmd)
copy_cmd = "xcopy /E/S/Y %s compiled\\bin" % dist_path
if os.path.exists(dist_path):
print("".ljust(100, "-"))
print("nuitka successful, now xcopying to compiled\\bin directory")
print("".ljust(100, "-"))
subprocess.call(copy_cmd)
print("".ljust(100, "-"))
print("'%s' should now be in '%s' and in 'compiled\\bin'\n" % (EXE, dist_path))
Что он делает: Он ищет и копирует соответствующие библиотеки TK и TCL и помещает их вместе в каталог с именем "lib" рядом содин создан самой нуиткой (которая называется scriptname.dist).Затем я копирую материал .dist в каталог «run».Вы можете повторить этот скрипт для каждого скрипта, для которого вы хотите .exe.Они попадут в каталог «run», чтобы со временем сформировать библиотеку ваших собственных EXE-файлов.