*.py скрипт с модулем tkinterdnd2 не компилируется в исполняемый файл

avatar
HappyLemon
8 августа 2021 в 15:47
441
2
0

Я сделал приложение, использующее модули tkinter и tkinterdnd. Он отлично работает, когда я запускаю его как скрипт, однако, когда я пытаюсь создать из него исполняемый файл и запустить его, возникает следующая ошибка:

Traceback (most recent call last):
  File "TkinterDnD2\TkinterDnD.py", line 53, in _require
_tkinter.TclError: can't find package tkdnd

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "IxcomGUI.py", line 128, in <module>
  File "IxcomGUI.py", line 11, in __init__
  File "TkinterDnD2\TkinterDnD.py", line 285, in __init__
  File "TkinterDnD2\TkinterDnD.py", line 55, in _require
RuntimeError: Unable to load tkdnd library.
[14512] Failed to execute script 'IxcomGUI' due to unhandled exception!

Я попробовал следующее:

  1. Установлен tkinterdnd2 с pip install и собран с pyinstaller myscript.py.
  2. Установленный вручную модуль tkinterdnd2, как показано в этом видео https://www.youtube.com/watch?v=JIy0QjwQBl0&t=605s&ab_channel=RamonWilliams и собран с помощью pyinstaller myscript.py
  3. Повторил предыдущий шаг, но добавил вот это https://github.com/pmgagne/tkinterdnd2/blob/master/hook-tkinterdnd2.py
  4. Пытался неявно указать pyinstaller путь к модулю tkdnd, указав путь к модулю с флагом --paths.

Все эти попытки привели к следующей ошибке. Кто-нибудь знает какое-нибудь решение?

Источник
jasonharper
8 августа 2021 в 15:54
0

Вы включили часть --additional-hooks-dir=. в командную строку pyinstaller, как сказано в файле на шаге 3?

HappyLemon
8 августа 2021 в 15:56
0

да, я нашел, но я также случайно нашел решение, я уже разместил его здесь.

Ответы (2)

avatar
HappyLemon
8 августа 2021 в 15:55
0

Очевидно, решить эту проблему оказалось неожиданно легко. Все, что вам нужно, это перейти в каталог <YourPath>\Python39\tcl, найти каталог tkdnd2.8 и переместить его в каталог tcl8.6. Я также переименовал его в просто tkdnd, однако не знаю, нужно ли это.

Вот исходная ссылка, которая спасла меня: http://pyinstaller.47505.x6.nabble.com/tkinter-TclError-can-t-find-package-tkdnd-td2330.html

Sagar H
9 сентября 2021 в 08:11
0

Я также столкнулся с проблемой, но я могу успешно собрать и создать один исполняемый файл с помощью pyinstaller, но когда я пытаюсь запустить, я получаю следующую ошибку: RuntimeError: невозможно загрузить библиотеку tkdnd. Я только что проверил, что в моем каталоге tcl нет папки tkdnd, подскажите, пожалуйста, по этому вопросу. Спасибо

HappyLemon
10 сентября 2021 в 14:50
0

Эм, я какое-то время не работал над этим проектом, но, может быть, ваши библиотеки установлены в каком-то другом каталоге?

deshu
27 сентября 2021 в 12:25
1

Вышеупомянутая ссылка больше не работает. Здесь я нашел архив: mail-archive.com/pyinstaller@googlegroups.com/msg07800.html

avatar
Gary02127
7 декабря 2021 в 20:27
2

Проблема в том, что для Drag n Drop требуются два компонента: библиотеки TCL и интерфейс Tkinter для них. Я устанавливаю оба вручную, чтобы настроить свою среду. (См. мой ответ на Как установить и использовать TkDnD с Python Tkinter на OSX?). Я знаю, что кто-то упаковал что-то в PyPI для TkinterDnD2, но я не изучал это.

У меня есть проект, в котором используется TkinterDnD2. Я создаю его с помощью PyInstaller и вижу ту же ошибку, что и вы (более или менее). Запустив PyInstaller с параметром --onedir (вместо параметра --onefile), я увидел, что tkdnd2.8 отсутствует в моем каталоге dist.

Чтобы исправить это, в Windows я добавил

--add-binary "C:/Python/Python38-32/tcl/tkdnd2.8;tkdnd2.8"

в командную строку PyInstaller, и это помогло. Теперь я могу собрать исполняемый файл --onefile, и он работает без ошибок.