尝试从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。我为我工作。但我不知道这是不是正确的方式。
- 安装tkinter
sudo apt-get install python3-tk
- 转到virtualenv的python-lib文件夹
cd ~/.virtualenvs/cv/lib/python3.4/
- 链接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包">
我最终删除并重新创建了我的虚拟环境使用了上述帖子中的建议。以下是我的步骤:
- 如果您的虚拟环境已激活,则运行此命令将需求冻结到以后可以访问的文件中:
pip freeze > requirements.txt
- 如果您的虚拟环境已激活,请使用以下方法将其停用:
deactivate
- 删除您的virtualenv文件夹
- 使用以下方法安装python-tk:
sudo apt-get install python-tk
- 使用以下方法重新创建virtualenv:
virtualenv <nameofyourenv> --system-site-packages
- 接下来,激活您的虚拟机:
source <virtual environment folder>/bin/activate
- 从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_PATH
和TCL_PATH
的解决方案似乎都不起作用,即使在虚拟环境之外使用tkinter提供的路径时也是如此(请参阅本文(。可以肯定的是,只需删除venv并创建一个新的venv。