Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TKinter in a Virtualenv

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?

like image 911
Jasper van den Bosch Avatar asked Apr 08 '13 16:04

Jasper van den Bosch


2 Answers

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

like image 180
A. Rodas Avatar answered Nov 07 '22 01:11

A. Rodas


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. install tkinter
sudo apt-get install python3-tk
  1. go to your virtualenv's python lib folder
cd ~/.virtualenvs/cv/lib/python3.4/
  1. link the tkinter
ln -s /usr/lib/python3.4/tkinter tkinter

Hope this helps.

In later versions of python, this may result in a

ModuleNotFoundError: No module named '_tkinter'

In this case, ensure to also symlink
/usr/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so
as path/to/virtualenv/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so using

ln -s /usr/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so _tkinter.cpython-36m-x86_64-linux-gnu.so

from within your virtualenv lib/python3.x/lib-dynload/ directory.

like image 20
RJ87 Avatar answered Nov 07 '22 01:11

RJ87