Подтвердить что ты не робот

TKinter в Virtualenv

Пытается запустить код python с виджетами на основе TKinter из virtualenv.

    [email protected]:~/myproject$ env/bin/python Python
    2.7.3 (default, Sep 26 2012, 21:51:14)  [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information.
    >>> import Tkinter 
Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 42, in <module>
        raise ImportError, str(msg) + ', please install the python-tk package' ImportError: No module named _tkinter, please install the python-tk package

Каков правильный способ установки TK на virtualenv?

4b9b3361

Ответ 1

Задайте переменную окружения TCL_LIBRARY в activate script. В Windows (Python 2.7 с Tcl 8.5) просто добавьте эту строку в Scripts\activate.bat:

set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"

@Jasper van den Bosch edit: В Ubuntu модификация script activate заключается в следующем:

TK_LIBRARY=/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/site-packages/PIL:/usr/lib
TKPATH=/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/site-packages/PIL:/usr/lib 
TCL_LIBRARY=/usr/lib 
export TCL_LIBRARY TK_LIBRARY TKPATH

Ссылка на это можно найти на на этот вопрос по askubuntu

Ответ 2

Я использую python2.7 с virtualenv на машине под управлением linux mint. Я получил ту же самую ошибку, о которой говорил OP при запуске приложения, которое требовало matplotlib в моем virtualenv. "ImportError: нет модуля с именем _tkinter, установите пакет python-tk"

В итоге я удалил и воссоздал свою виртуальную среду, используя предложения в вышеуказанных сообщениях. Вот мои шаги:

  • если ваша виртуальная среда активирована, затем запустите эту команду, чтобы заморозить требования к файлу, к которому вы можете получить доступ позже: pip freeze > requirements.txt
  • Если ваша виртуальная среда активирована, отключите ее, используя: deactivate
  • удалите свою папку virtualenv.
  • установить python-tk, используя: sudo apt-get install python-tk
  • воссоздайте свой virtualenv, используя: virtualenv <nameofyourenv> --system-site-packages
  • Далее, активируйте свой virtualenv: source <virtual environment folder>/bin/activate
  • восстановить все ваши пакеты, которые вы ранее застыли из файла requirements.txt: pip install -r <path to requirements.txt file>

теперь, когда я запускаю тот же код, что и раньше, у него нет проблем с импортом _tkinter. Надеюсь это поможет! Спасибо всем вышеперечисленным предложениям. Это очень помогло мне.

Ответ 3

Мне удается интегрировать tkinter в python3 в virtualenv с помощью папки symlink tkinter в virtualenv python3. Я работаю на меня. Но я не знаю, правильно ли это.

  1. sudo apt-get install python3-tk

  2. cd ~/.virtualenvs/cv/lib/python3.4/

  3. ln -s /usr/lib/python3.4/tkinter tkinter

Надеюсь, это поможет.

В более поздних версиях Python это может привести к ModuleNotFoundError: No module named '_tkinter'. В этом случае убедитесь, что вы также используете символическую ссылку /usr/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so как path/to/virtualenv/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so, используя ln -s /usr/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so _tkinter.cpython-36m-x86_64-linux-gnu.so из вашего каталога virtualenv lib/python3.x/lib-dynload/.

Ответ 4

Это действительно обновление отличного ответа от A. Rodas для использования с Python 3.4 и Tcl 8.6 (у меня недостаточно комментариев для комментариев).

Задайте переменную окружения TCL_LIBRARY в вашей активации script. В Windows (Python 3.4 с Tcl 8.6) просто добавьте эту строку в Scripts\activate.bat:

set "TCL_LIBRARY=C:\Python34\tcl\tcl8.6"

Я столкнулся с этой проблемой при использовании Windows 7, Python 3.4 и ggplot в виртуальной среде.

Ответ 5

Чтобы заставить это работать в powershell, вам нужно отредактировать файл activate.ps1 вместо activate.bat. Просто добавьте следующее для активации .ps1: $env:TCL_LIBRARY = "C:\Python27\tcl\tcl8.5"

Ответ 6

клонировать проект cpython

git clone [email protected]:python/cpython.git

cd в каталог cpython. git checkout желаемая версия вашего виртуального env (для меня это 3.4), и построить его с помощью

./configure
make
make test
sudo make install

вы найдете файл so _tkinter.cpython-xxx.so в подкаталоге каталога build/, скопируйте его в каталог venv lib-dynload. (для меня это ~/tf1.1py3.4/lib/python3.4/lib-dynload/)

Ответ 7

Также обновление от ответа A.Rodas - я попытался сделать это в Windows 7 с помощью Windows Powershell, но не смог это сделать (я также не хватает очков репутации для комментариев

Я понял, даже когда я добавил строку set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5" и соответствующий для библиотеки tk, activate.bat script, ссылка tcl не обновлялась, и мне нужно было просто перейти в каталог, где он ищет файлы tcl, и скопировать соответствующий tcl и tk в этот каталог. Теперь файл находится по умолчанию, поэтому вам не нужно обновлять activate.bat каждый раз, когда вы создаете новую среду

Ответ 8

Для меня решение было скопировать папку tcl из

C:\Users\{myUser}\Python3.5\tcl

к

C:\Users\{myUser}\{myVirtualEnv}

замените {myUser} и {myVirtualEnv} на ваши конкретные имена каталогов.

Ответ 9

В случае, если это помогает тем, кто царапает голову после прочтения всех ответов здесь - также может показаться, что вам может потребоваться заново создать virtualenv, если вы создали его до установки python3.6-tk. Похоже, ни одно из решений с указанием TK_PATH и TCL_PATH не сработало даже при использовании путей, указанных tkinter вне виртуальной среды (см. этот пост). Чтобы быть уверенным, просто удалите venv и создайте новый.