35

尝试使用来自 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 的正确方法是什么?

4

9 回答 9

46

在脚本中设置环境变量 TCL_LIBRARY activate。在 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

可以在 askubuntu 上的这个问题上找到这个参考

于 2013-04-10T22:36:07.557 回答
19

我设法通过文件夹将tkinterpython3 集成到 virtualenv到. 我为我工作。但我不知道这是否是正确的方法。symlink tkintervirtualenv python3

  1. 安装tkinter
sudo apt-get install python3-tk
  1. 转到您的 virtualenv 的 python lib 文件夹
cd ~/.virtualenvs/cv/lib/python3.4/
  1. 链接 tkinter
ln -s /usr/lib/python3.4/tkinter tkinter

希望这可以帮助。

在更高版本的 python 中,这可能会导致

ModuleNotFoundError: No module named '_tkinter'

在这种情况下,请确保也符号链接
/usr/lib/python3.x/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so
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

从您的 virtualenvlib/python3.x/lib-dynload/目录中。

于 2016-05-23T13:00:26.763 回答
10

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

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

  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>

现在,当我运行与以前相同的代码时,导入 _tkinter 没有问题。希望这可以帮助!感谢楼上大家的建议。它真的帮了我很多。

于 2017-01-17T00:06:50.867 回答
6

这确实是对 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 时遇到了这个问题。

于 2015-08-06T17:44:47.707 回答
1

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

于 2015-10-29T19:40:00.423 回答
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/,将其复制到您的 venvlib-dynload目录。(对我来说是~/tf1.1py3.4/lib/python3.4/lib-dynload/

于 2018-11-01T14:27:46.970 回答
0

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

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

于 2015-09-08T21:20:11.487 回答
0

对我来说,解决方案是从 tcl 复制文件夹

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

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

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

于 2016-07-12T19:34:10.440 回答
0

如果这有助于那些在阅读此处的所有答案后摸不着头脑的人 - 似乎您可能需要重新创建您的 virtualenv,以防您在安装之前创建它python3.6-tk。即使在虚拟环境之外使用 tkinter 给出的路径(参见这篇文章) ,指定TK_PATH和似乎都没有解决方案。可以肯定的是,只需删除 venv 并创建一个新的。TCL_PATH

于 2019-02-13T10:12:39.703 回答