TKinter in a Virtualenv

匿名 (未验证) 提交于 2019-12-03 02:14:01

问题:

Trying to run python code with TKinter-based widgets from a 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 

What is the proper way to install TK to the virtualenv?

回答1:

Set the environment variable TCL_LIBRARY in your activate script. On Windows (Python 2.7 with Tcl 8.5), just add this line to Scripts\activate.bat:

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

@Jasper van den Bosch's edit: On Ubuntu, the modification to the script activate is the following:

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 

The reference of this can be found on this question on askubuntu



回答2:

This is really an update to the great answer from A. Rodas for use with Python 3.4 and Tcl 8.6 (I don't have enough reputation points to comment).

Set the environment variable TCL_LIBRARY in your activate script. On Windows (Python 3.4 with Tcl 8.6), just add this line to Scripts\activate.bat:

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

I came across this issue while using Windows 7, Python 3.4, and ggplot in a virtual environment.



回答3:

I manage to integrate tkinter in python3 to virtualenv by symlink tkinter folder to virtualenv python3. I works for me. But I don't know if it's the right way.

  1. sudo apt-get install python3-tk

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

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

Hope this helps.



回答4:

I am using python2.7 with a virtualenv on a machine running linux mint. I received the exact same error as mentioned by the OP when running an application that required matplotlib in my virtualenv. "ImportError: No module named _tkinter, please install the python-tk package"

I ended up deleting and recreating my virtual environment using the suggestions in the above posts. Here are my steps:

  1. if your virtual environment is activated, then run this command to freeze the requirements to a file that you can access later: pip freeze > requirements.txt
  2. if your virtual environment is activated, then deactivate it using: deactivate
  3. delete your virtualenv folder.
  4. install python-tk using: sudo apt-get install python-tk
  5. recreate your virtualenv using: virtualenv <nameofyourenv> --system-site-packages
  6. next, activate your virtualenv: source <virtual environment folder>/bin/activate
  7. restore all your packages that you froze earlier from the requirements.txt file: pip install -r <path to requirements.txt file>

now, when I run the same code as before, it has no problem importing _tkinter. Hope this helps! Thanks to the everyone's suggestions above. It really helped me a lot.



回答5:

To get this working in powershell, you have to edit the activate.ps1 file instead of activate.bat. Just add the following to activate.ps1: $env:TCL_LIBRARY = "C:\Python27\tcl\tcl8.5"



回答6:

Also an update from answer by A.Rodas - I have tried doing that in Windows 7 using Windows Powershell but wasn't able to get it done (I also do not have enough reputation points to comment

I realized even when I added the line set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5" and the corresponding one for the tk library, to the activate.bat script, the tcl link was not getting updated, and what I needed to do was just go to the directory where it's looking for the tcl files, and copy the corresponding tcl and tk files to that directory. Now the file is in the default location so you don't need to update activate.bat everytime you create a new environment



回答7:

For me the solution was copying the folder tcl from

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

to

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

replace {myUser} and {myVirtualEnv} with your specific directory names.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!