TKinter dans un Virtualenv
Essayez d'exécuter du code python avec TKinter, à base de widgets à partir d'un 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
Quelle est la bonne façon d'installer les SAVOIRS traditionnels à l'virtualenv?
- Je ne sais pas de quoi que ce soit à propos de
TKinter
, mais j'ai couru dans des problèmes similaires à essayer d'obtenirwxPython
etpyGTK
de travail à l'intérieur d'unvirtualenv
. Je n'ai jamais été en mesure de trouver une méthode satisfaisante pour l'installation de ces derniers dans unevirtualenv
car ils sont fortement dépendants des bibliothèques partagées. Ne vous avez besoin d'une version spécifique deTkinter
autre que celui de votre système de packages de site? Sinon, je recommande simplement la création d'unvirtualenv
avec le--system-site-packages
drapeau, puis localement l'installation de toutes les autres modules spécifiques dont vous avez besoin. - van den Bosch Depuis votre modification a été rejetée (examinateurs ont estimé qu'il était nul, mais il est très utile en fait), j'ai ajouté à ma réponse, n'hésitez pas à l'améliorer.
Vous devez vous connecter pour publier un commentaire.
Définir la variable d'environnement TK_LIBRARY dans votre
activate
script. Sur Windows (Python 2.7 avec Tcl 8.5), il suffit d'ajouter cette ligne àScripts\activate.bat
:@Jasper van den Bosch edit: Sur Ubuntu, la modification du script
activate
est la suivante:La référence de ce qui peut être trouvé sur cette question sur askubuntu
virtualenv
avec--system-site-packages
.Je suis à l'aide de python2.7 avec un virtualenv sur un ordinateur fonctionnant sous linux mint.
J'ai reçu exactement la même erreur, comme mentionné par l'OP lors de l'exécution d'une application qui exige matplotlib dans mon virtualenv. "ImportError: No module named _tkinter, s'il vous plaît installer python-tk package"
J'ai fini par supprimer et recréer mon environnement virtuel en utilisant les suggestions ci-dessus affiche. Voici mes étapes:
pip freeze > requirements.txt
deactivate
sudo apt-get install python-tk
virtualenv <nameofyourenv> --system-site-packages
source <virtual environment folder>/bin/activate
pip install -r <path to requirements.txt file>
maintenant, lorsque j'exécute le même code que précédemment, il n'a pas de problème d'importation _tkinter. Espérons que cette aide! Merci à tout le monde les suggestions ci-dessus. Il m'a vraiment aidé beaucoup.
J'ai réussi à intégrer
tkinter
en python3 à virtualenv parsymlink tkinter
dossier devirtualenv python3
. Je travaille pour moi. Mais je ne sais pas si c'est la bonne façon.sudo apt-get install python3-tk
cd ~/.virtualenvs/cv/lib/python3.4/
ln -s /usr/lib/python3.4/tkinter tkinter
Espère que cette aide.
C'est vraiment une mise à jour de la grande réponse de A. Rodas pour une utilisation avec Python 3.4 et Tcl 8.6 (je n'ai pas assez de points de réputation pour le commentaire).
Définir la variable d'environnement TK_LIBRARY dans votre activer le script. Sur Windows (Python 3.4 avec Tcl 8.6), il suffit d'ajouter cette ligne à des Scripts\activer.chauve-souris:
Je suis tombé sur ce problème pendant l'utilisation de Windows 7, Python 3.4, et ggplot dans un environnement virtuel.
De le faire fonctionner en powershell, vous devez modifier l'activer.ps1 fichier au lieu de l'activer.chauve-souris. Il suffit d'ajouter le suivant pour l'activer.ps1:
$env:TCL_LIBRARY = "C:\Python27\tcl\tcl8.5"
cloner le projet disponible
cd
le répertoire disponible.git checkout
la version souhaitée de votre virtuel env(pour moi, c'est 3.4),et de le construire avec des
vous trouverez une sorte de fichier
_tkinter.cpython-xxx.so
dans un sous répertoire de labuild/
répertoire, de le copier sur votre venv delib-dynload
dir. (pour moi, c'est~/tf1.1py3.4/lib/python3.4/lib-dynload/
)sudo apt install tk-dev
), et vous voulez vous assurer à la caisse de la version correspondant à la version de python utilisée dans votrevenv
(c'est à diregit checkout tags/v3.6.8 -b v3.6.8
).Tk
libs à l'époque. L'installation de ceux et de le recompiler/installation a fait le tour, comme monvenv
était toujours référence à la même emplacement d'installation.Également une mise à jour de la réponse par A. Rodas - j'ai essayé de faire ce que dans Windows 7 à l'aide de Windows Powershell, mais n'était pas en mesure de le faire (j'ai aussi ne pas avoir assez de points de réputation pour commentaire
J'ai réalisé que même quand j'ai ajouté la ligne
set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
et le correspondant de l'un pour les savoirs traditionnels de la bibliothèque, à la
activate.bat
script, le langage tcl lien n'était pas mis à jour, et ce que je devais faire, c'était aller dans le répertoire où il est à la recherche pour le tcl fichiers et copier le correspondant de tcl et tk fichiers dans ce répertoire. Maintenant, le fichier est dans l'emplacement par défaut de sorte que vous n'avez pas besoin de mettre à jouractivate.bat
chaque fois que vous créez un nouvel environnementpew
pour virtualenv de gestion. Essayer le fix à partir de @user2623839 ne fonctionne pas non plus,TCL_LIBRARY
n'est pas définie. Vous n'avez pas arriver à être l'aide d'pew
ainsi, par hasard ?Pour moi la solution est de copier le dossier tcl de
à
remplacer {myUser} et {myVirtualEnv} avec vos noms de répertoire.
Dans le cas où cette aide les personnes se gratter la tête après avoir lu toutes les réponses ici - même, il semble que vous pourriez avoir besoin de re-créer votre virtualenv dans le cas où vous avez créé avant l'installation de
python3.6-tk
. Aucune des solutions avec la spécificationTK_PATH
etTCL_PATH
semblait fonctionner, même lorsque vous utilisez les chemins d'accès indiqués par tkinter, en dehors de l'environnement virtuel (voir ce post). Pour être sûr, il suffit de supprimer le venv et en créer un nouveau.