TKirt在Virtualenv

时间:2013-04-08 16:15:01

标签: python tkinter virtualenv

尝试使用virtualenv中基于TKinter的小部件运行python代码。

    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

将TK安装到virtualenv的正确方法是什么?

9 个答案:

答案 0 :(得分:41)

activate脚本中设置环境变量TCL_LIBRARY。在Windows(带有Tcl 8.5的Python 2.7)上,只需将此行添加到Scripts\activate.bat

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

@Jasper van den Bosch的编辑:在Ubuntu上,对脚本activate的修改如下:

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

可以在this question on askubuntu

上找到对此的引用

答案 1 :(得分:8)

我在运行linux mint的机器上使用python2.7和virtualenv。 当我在virtualenv中运行需要matplotlib的应用程序时,我收到了OP提到的完全相同的错误。 &#34; ImportError:没有名为_tkinter的模块,请安装python-tk包&#34;

我最后使用上述帖子中的建议删除并重新创建了我的虚拟环境。以下是我的步骤:

  1. 如果您的虚拟环境已激活,则运行此命令将需求冻结到您稍后可以访问的文件: pip freeze > requirements.txt
  2. 如果您的虚拟环境已激活,请使用以下命令停用它: deactivate
  3. 删除您的virtualenv文件夹。
  4. 使用以下命令安装python-tk: sudo apt-get install python-tk
  5. 使用以下方法重新创建您的virtualenv: virtualenv <nameofyourenv> --system-site-packages
  6. 接下来,激活你的virtualenv: source <virtual environment folder>/bin/activate
  7. 从requirements.txt文件中恢复之前冻结的所有包: pip install -r <path to requirements.txt file>
  8. 现在,当我运行与以前相同的代码时,导入_tkinter没有问题。希望这可以帮助!感谢上面的每个人的建议。这对我帮助很大。

答案 2 :(得分:7)

我设法通过tkinter文件夹将symlink tkinter在python3中与virtualenv集成到virtualenv python3。我为我工作。但我不知道这是不是正确的方式。

  1. sudo apt-get install python3-tk

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

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

  4. 希望这有帮助。

答案 3 :(得分:5)

这真是对A. Rodas与Python 3.4和Tcl 8.6(我没有足够的声誉点评论)的完美答案的更新。

在激活脚本中设置环境变量TCL_LIBRARY。在Windows(带有Tcl 8.6的Python 3.4)上,只需将此行添加到Scripts \ activate.bat:

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

我在虚拟环境中使用Windows 7,Python 3.4和ggplot时遇到过这个问题。

答案 4 :(得分:1)

要在PowerShell中使用此功能,您必须编辑activate.ps1文件而不是activate.bat。只需将以下内容添加到activate.ps1: $env:TCL_LIBRARY = "C:\Python27\tcl\tcl8.5"

答案 5 :(得分:1)

克隆cpython项目

git clone git@github.com:python/cpython.git

cd到cpython目录。 git checkout所需的虚拟环境版本(对我来说是3.4), 并用

构建
./configure
make
make test
sudo make install

您将在_tkinter.cpython-xxx.so目录的子目录中找到一个so文件build/,并将其复制到venv的lib-dynload目录中。 (对我来说是~/tf1.1py3.4/lib/python3.4/lib-dynload/

答案 6 :(得分:0)

也是A.Rodas回答的更新 - 我尝试使用Windows Powershell在Windows 7中执行此操作,但无法完成此操作(我也没有足够的声誉点来评论

即使我添加了这条线,我也意识到了 set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5" 和tk库相对应的那个,到activate.bat脚本,tcl链接没有得到更新,我需要做的只是去它寻找tcl文件的目录,并将相应的tcl和tk文件复制到该目录。现在该文件位于默认位置,因此您无需在每次创建新环境时更新activate.bat

答案 7 :(得分:0)

对我来说,解决方案是从

复制文件夹tcl
C:\Users\{myUser}\Python3.5\tcl

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

将{myUser}和{myVirtualEnv}替换为您的特定目录名称。

答案 8 :(得分:0)

以防万一,这些人在阅读完所有答案后会scratch不休-似乎还需要重新创建您的virtualenv,以防在安装python3.6-tk之前创建了它。指定TK_PATHTCL_PATH的解决方案似乎都不起作用,即使在虚拟环境之外使用tkinter给出的路径时也是如此(请参见this post)。当然,只需删除venv并创建一个新的。