TKinter in a 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安装到虚拟机的正确方法是什么?

activate脚本中设置环境变量TCL_LIBRARY。在Windows(Python 2.7和Tcl 8.5(上,只需将此行添加到Scriptsactivate.bat:

set "TCL_LIBRARY=C:Python27tcltcl8.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 上找到

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

  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 使用

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

来自您的virtualenv lib/python3.x/lib-dynload/目录。

我在运行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. 接下来,激活您的虚拟机:source <virtual environment folder>/bin/activate
  7. 从requirements.txt文件中恢复先前冻结的所有程序包:pip install -r <path to requirements.txt file>

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

这确实是对A.Rodas的优秀答案的更新,可用于Python 3.4和Tcl 8.6(我没有足够的信誉点可以评论(。

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

set "TCL_LIBRARY=C:Python34tcltcl8.6"

我在虚拟环境中使用Windows7、Python3.4和ggplot时遇到了这个问题。

要在powershell中实现这一点,您必须编辑activate.ps1文件,而不是activate.bat。只需在activate.ps1中添加以下内容:$env:TCL_LIBRARY = "C:Python27tcltcl8.5"

克隆cpython项目

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

cd到cpython目录。CCD_ 18是您的虚拟环境的所需版本(对我来说是3.4(,并使用构建

./configure
make
make test
sudo make install

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

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

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

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

C:Users{myUser}Python3.5tcl

C:Users{myUser}{myVirtualEnv}

用您的特定目录名替换{myUser}和{myVirtualEnv}。

如果这有助于那些在看完这里的所有答案后挠头的人,那么你可能还需要重新创建你的虚拟机,以防你在安装python3.6-tk之前创建了它。指定TK_PATHTCL_PATH的解决方案似乎都不起作用,即使在虚拟环境之外使用tkinter提供的路径时也是如此(请参阅本文(。可以肯定的是,只需删除venv并创建一个新的venv。

最新更新