2013-04-08 2 views
22

Пытается запустить код python с виджетами на основе TKinter из virtualenv.TKinter in a 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?

+2

Я ничего не знаю о 'TKinter', но я столкнулся с подобными проблемами, пытаясь получить' wxPython' и 'pyGTK', работающие внутри' virtualenv'. Я никогда не мог найти удовлетворительный метод для их установки в 'virtualenv', потому что они сильно зависят от разделяемых библиотек. Вам нужна какая-то конкретная версия «Tkinter», отличная от той, что находится в пакетах вашего сайта системы? В противном случае я бы рекомендовал просто создать 'virtualenv' с флагом' 'ssystem-site-packages', а затем локально установить любые другие необходимые вам модули. –

+0

@ Jasper van den Bosch Поскольку ваши изменения были отклонены (рецензенты считали это недействительным, но это очень полезно), я добавил его к своему ответу, не стесняйтесь его улучшать. –

ответ

34

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

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

@Jasper ван ден Боша: В Ubuntu, модификация для сценария 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 

Ссылка на это можно найти на this question on askubuntu

+1

Для удобства использования я предлагаю инициализировать 'virtualenv'' 'ssystem-site-packages'. – luka5z

5

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

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

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

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

+0

Это решение сработало для меня. За исключением того, что мне нужно было выяснить, где установлен python на моей машине Windows. –

0

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

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

+0

У меня такая же точная проблема, изменение скрипта не работает, переменная окружения не устанавливается с помощью 'pew' для управления virtualenv. Попытка исправить из @ user2623839 тоже не работает, 'TCL_LIBRARY' не установлен. Вы даже не случайно используете «pew»? – Overdrivr

1

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

3

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

  1. Sudo APT-получить установку python3-тк

  2. кд ~/.virtualenvs/резюме/Библиотека/python3.4/

  3. пер -s /usr/lib/python3.4/tkinter tkinter

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

+0

Я не вижу смысла использовать virtualenv, если вы собираетесь использовать sudo для его установки. – JasTonAChair

+1

Sudo - установить бинарную библиотеку, которая является Tk. Для виртуального пользователя просто нужна символическая ссылка, чтобы знать, где искать. –

0

Для меня решение было копирование Tcl папки из

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

в

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

заменить {MyUser} и {} myVirtualEnv с конкретными именами каталогов.

5

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

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

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

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