2013-04-08 17 views
22

Tentativo di eseguire codice Python con widget basati su TKinter da un 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 

Qual è il modo corretto di installare TK sul virtualenv?

+2

Non so nulla di specifico su 'TKinter', ma ho riscontrato problemi simili cercando di ottenere' wxPython' e 'pyGTK' lavorando all'interno di' virtualenv'. Non sono mai riuscito a trovare un metodo soddisfacente per l'installazione di questi in un 'virtualenv' perché dipendono fortemente dalle librerie condivise. Hai bisogno di una versione specifica di 'Tkinter' diversa da quella dei pacchetti del tuo sito di sistema? Altrimenti raccomanderei semplicemente di creare un 'virtualenv' con il flag' --system-site-packages', quindi installare localmente qualunque altro modulo specifico di cui hai bisogno. –

+0

@Jasper van den Bosch Poiché la tua modifica è stata rifiutata (i revisori hanno ritenuto che non fosse valida, ma è davvero molto utile), l'ho aggiunta alla mia risposta, sentiti libera di migliorarla. –

risposta

34

Impostare la variabile di ambiente TCL_LIBRARY nello script activate. Su Windows (Python 2.7 con Tcl 8.5), basta aggiungere questa riga a Scripts\activate.bat edit

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

@Jasper van den Bosch: Su Ubuntu, la modifica allo script activate è la seguente:

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 

Il riferimento è disponibile al this question on askubuntu

+1

Per facilità d'uso suggerirei di inizializzare 'virtualenv' con' --system-site-packages'. – luka5z

5

Questo è davvero un aggiornamento dell'ottima risposta di A. Rodas per l'utilizzo con Python 3.4 e Tcl 8.6 (Non ho abbastanza punti reputazione da commentare).

Impostare la variabile di ambiente TCL_LIBRARY nello script di attivazione. Su Windows (Python 3.4 con Tcl 8.6), basta aggiungere questa linea al Scripts \ activate.bat:

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

mi sono imbattuto in questo problema durante l'utilizzo di Windows 7, Python 3.4 e ggplot in un ambiente virtuale.

+0

Questa soluzione ha funzionato per me. Tranne che ho dovuto scoprire dove Python è installato sulla mia macchina Windows. –

0

anche un aggiornamento dalla risposta da A.Rodas - Ho provato a farlo in Windows 7 tramite Windows PowerShell, ma non è stato in grado di farlo fare (anche io non ho punti reputazione abbastanza per commentare

mi sono reso conto ancora quando ho aggiunto la riga set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5" e quella corrispondente per la libreria tk, allo script activate.bat, il collegamento tcl non veniva aggiornato e quello che dovevo fare era andare nella directory in cui si cerca i file tcl, e copia i corrispondenti file tcl e tk in quella directory. Ora il file si trova nella posizione predefinita, quindi non è necessario aggiornare activate.bat ogni volta che si crea un nuovo ambiente

+0

Ho lo stesso identico problema, la modifica dello script non funziona, la variabile di ambiente non è impostata usando 'pew' per la gestione virtualenv. Anche il tentativo di correzione da @ user2623839 non funziona, 'TCL_LIBRARY' non è impostato. Non ti capita di usare il pew anche per caso? – Overdrivr

1

Per ottenere questo funzionamento in PowerShell, è necessario modificare il file activate.ps1 anziché activate.bat. Basta aggiungere la seguente al activate.ps1: $env:TCL_LIBRARY = "C:\Python27\tcl\tcl8.5"

3

riesco a integrare tkinter in python3 a virtualenv per cartella symlink tkinter-virtualenv python3. Io lavoro per me. Ma non so se è la strada giusta.

  1. sudo apt-get install python3-tk

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

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

Spero che questo aiuti.

+0

Non vedo il punto usando un virtualenv se userai sudo per installarlo. – JasTonAChair

+1

Il sudo è di installare la libreria binaria che è Tk. Il virtualenv ha solo bisogno di un link simbolico per sapere dove cercare. –

0

Per me la soluzione è stata la copia della cartella da TCL

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

a

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

sostituire {myUser} e {} myVirtualEnv con i vostri nomi di directory specifiche.

5

Sto usando python2.7 con un virtualenv su una macchina che esegue linux mint. Ho ricevuto esattamente lo stesso errore menzionato dall'OP durante l'esecuzione di un'applicazione che richiedeva matplotlib nel mio virtualenv. "ImportError: nessun modulo chiamato _tkinter, installa il pacchetto python-tk"

Ho finito per cancellare e ricreare il mio ambiente virtuale usando i suggerimenti nei post precedenti. Ecco i miei passi:

  1. se l'ambiente virtuale è attivato, quindi eseguire il comando di congelare i requisiti a un file che è possibile accedere in seguito: pip freeze > requirements.txt
  2. se l'ambiente virtuale è attivato, disattivarlo utilizzando: deactivate
  3. elimina la cartella virtualenv.
  4. installare python-tk utilizzando: sudo apt-get install python-tk
  5. ricreare il virtualenv utilizzando: virtualenv <nameofyourenv> --system-site-packages
  6. successiva, attivare il virtualenv: source <virtual environment folder>/bin/activate
  7. ripristinare tutti i pacchetti che si ha congelato in precedenza dal file requirements.txt: pip install -r <path to requirements.txt file>

ora, quando si esegue lo stesso codice di prima, non ha nessun problema importando _tkinter. Spero che questo ti aiuti! Grazie ai suggerimenti di tutti sopra. Mi ha davvero aiutato molto.