web-dev-qa-db-fra.com

TKinter dans une Virtualenv

Essayer d'exécuter du code python avec des widgets basés sur TKinter à partir d'un virtualenv.

    user@computer:~/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

Quelle est la bonne manière d'installer TK sur le virtualenv?

28

Définissez la variable d'environnement TCL_LIBRARY dans votre script activate. Sous Windows (Python 2.7 avec Tcl 8.5), ajoutez simplement cette ligne à Scripts\activate.bat:

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

@Jasper van den Bosch's edit: Sous Ubuntu, la modification du script activate est la suivante:

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

La référence de this peut être trouvée sur cette question sur askubuntu

39
A. Rodas

Je parviens à intégrer tkinter dans python3 à virtualenv par le dossier symlink tkinter à virtualenv python3. Je travaille pour moi Mais je ne sais pas si c'est la bonne façon.

  1. Sudo apt-get install python3-tk 

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

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

J'espère que cela t'aides.

7
RJ87

J'utilise python2.7 avec virtualenv sur une machine sous linux mint. J'ai reçu la même erreur que celle mentionnée par l'OP lors de l'exécution d'une application nécessitant matplotlib dans virtualenv. "ImportError: Aucun module nommé _tkinter, veuillez installer le paquet python-tk"

J'ai fini par supprimer et recréer mon environnement virtuel en utilisant les suggestions des publications ci-dessus. Voici mes étapes:

  1. si votre environnement virtuel est activé, exécutez cette commande pour figer les exigences dans un fichier auquel vous pourrez accéder ultérieurement: pip freeze > requirements.txt
  2. si votre environnement virtuel est activé, désactivez-le en utilisant: deactivate
  3. supprimez votre dossier virtualenv. 
  4. installez python-tk en utilisant: Sudo apt-get install python-tk
  5. recréez votre virtualenv en utilisant: virtualenv <nameofyourenv> --system-site-packages
  6. ensuite, activez votre virtualenv: source <virtual environment folder>/bin/activate
  7. restaurez tous les paquets que vous avez gelés précédemment à partir du fichier requirements.txt: pip install -r <path to requirements.txt file>

maintenant, quand je lance le même code qu'avant, l'importation de _tkinter ne pose aucun problème. J'espère que cela t'aides! Merci aux suggestions de tout le monde ci-dessus. Cela m'a beaucoup aidé. 

7
JShare

C'est vraiment une mise à jour de l'excellente réponse de A. Rodas à utiliser avec Python 3.4 et Tcl 8.6 (je n'ai pas assez de points de réputation pour commenter).

Définissez la variable d'environnement TCL_LIBRARY dans votre script d'activation. Sous Windows (Python 3.4 avec Tcl 8.6), ajoutez simplement cette ligne à Scripts\activate.bat:

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

Je suis tombé sur ce problème lorsque j'utilisais Windows 7, Python 3.4 et ggplot dans un environnement virtuel.

5
detachedhead

Pour que cela fonctionne dans powershell, vous devez éditer le fichier activate.ps1 au lieu de activate.bat. Ajoutez simplement ce qui suit pour activer.ps1: $env:TCL_LIBRARY = "C:\Python27\tcl\tcl8.5"

1
camel_case

Au cas où cela aiderait ceux qui se gratter la tête après avoir lu toutes les réponses ici - il semble également que vous deviez peut-être recréer votre virtualenv au cas où vous l'aviez créé avant d'installer python3.6-tk. Aucune des solutions spécifiant TK_PATH et TCL_PATH ne semblait fonctionner, même en utilisant les chemins donnés par tkinter en dehors de l'environnement virtuel (voir cet article ). Pour être sûr, supprimez simplement la variable venv et créez-en une nouvelle.

0
Max

cloner le projet cpython 

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

cd dans le répertoire cpython. git checkout la version souhaitée de votre env virtuel (pour moi c’est la version 3.4), et le construire avec

./configure
make
make test
Sudo make install

vous trouverez un fichier so _tkinter.cpython-xxx.so dans un sous-répertoire du répertoire build/, copiez-le dans le répertoire lib-dynload de votre venv (pour moi c'est ~/tf1.1py3.4/lib/python3.4/lib-dynload/)

0
陈家胜

Pour moi, la solution consistait à copier le dossier tcl de

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

à

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

remplacez {myUser} et {myVirtualEnv} par vos noms de répertoire spécifiques.

0
maniac

Également une mise à jour de la réponse de A.Rodas - J'ai essayé de le faire dans Windows 7 avec Windows Powershell mais je n’ai pas pu le faire (je n’ai pas assez de points de réputation pour commenter

J'ai réalisé que même lorsque j'ai ajouté la ligne set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5" .__ et la correspondance correspondante pour la bibliothèque tk, au script activate.bat, le lien tcl n'était pas mis à jour et il me fallait simplement aller dans le répertoire où il recherche les fichiers tcl et copie les fichiers tcl et tk correspondants dans ce répertoire. Maintenant, le fichier se trouve à l'emplacement par défaut, vous n'avez donc pas besoin de mettre à jour activate.bat chaque fois que vous créez un nouvel environnement.

0
markk