在windows下的虚拟环境中使用tk,要留神了
事情是这样的:有朋友在学习用matplotlib作图,遇到一些问题问我,我也没用过,就想先装一个试试。然后呢,我就随手创建了个虚拟环境。结果,涉及到matplotlib的第一行就报错了:
Traceback (most recent call last):
File "D:/workspace/PyTest/get_data.py", line 22, in <module>
plt.scatter(X[:50, 0], X[:50, 1], color="red", marker="o", label="setosa")
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\pyplot.py", line 3420, in scatter
ax = gca()
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\pyplot.py", line 950, in gca
return gcf().gca(**kwargs)
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\pyplot.py", line 586, in gcf
return figure()
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\pyplot.py", line 535, in figure
**kwargs)
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 81, in new_figure_manager
return new_figure_manager_given_figure(num, figure)
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 89, in new_figure_manager_given_figure
window = Tk.Tk()
File "C:\Python35\Lib\tkinter\__init__.py", line 1868, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
C:/Python35/lib/tcl8.6 D:/workspace/PyTest/py3env/lib/tcl8.6 D:/workspace/PyTest/lib/tcl8.6 D:/workspace/PyTest/py3env/library D:/workspace/PyTest/library D:/workspace/PyTest/tcl8.6.4/library D:/workspace/tcl8.6.4/library This probably means that Tcl wasn't installed properly.
经过分析,我想这是因为没有找到tkinter,而matplotlib需要用到这个。可是这东西装python时候是默认的,我肯定会装的。我翻了翻我的电脑,Tcl确实是装了的:
可是路径不对。经群里的同学指导,我还特意在主环境下测试了一下tk和tcl环境:
import tkinter
root = tkinter.Tk()
print(root.tk.exprstring('$tcl_library'))
print(root.tk.exprstring('$tk_library'))
在主环境中结果也是正常的:
C:\Python35\tcl\tcl8.6
C:/Python35/tcl/tk8.6
可是虚拟环境中就不正常了。
Traceback (most recent call last):
File "D:/workspace/PyTest/testtk.py", line 2, in <module>
root = tkinter.Tk()
File "C:\Python35\Lib\tkinter\__init__.py", line 1868, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
C:/Python35/lib/tcl8.6 D:/workspace/PyTest/py3env/lib/tcl8.6 D:/workspace/PyTest/lib/tcl8.6 D:/workspace/PyTest/py3env/library D:/workspace/PyTest/library D:/workspace/PyTest/tcl8.6.4/library D:/workspace/tcl8.6.4/library This probably means that Tcl wasn't installed properly.
这可就尴尬了。
但是,我又注意到一个细节:Tcl在查找环境的时候,会查找本机的主python环境,比如刚才那段报错中,Tcl查找了这样两个环境:
C:/Python35/lib/tcl8.6
D:/workspace/PyTest/py3env/lib/tcl8.6
其中C盘是我的主环境,D:/workspace/PyTest/py3env是虚拟环境。
然后我开始翻代码,看tcl查询的路径是啥。找不到。网上介绍了添加环境变量,TCL_LIBRARY和TK_LIBRARY,我试了也不行(可能这两个变量仅限于Linux系统),在path里面添加也不行。
走投无路的情况下我开始动歪脑筋,把Tcl8.6整个文件夹从C:\Python35\tcl\复制到了C:\Python35\Lib中,然后,居然……
Traceback (most recent call last):
File "D:/workspace/PyTest/ML/mcpperceptron/get_data.py", line 22, in <module>
plt.scatter(X[:50, 0], X[:50, 1], color="red", marker="o", label="setosa")
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\pyplot.py", line 3420, in scatter
ax = gca()
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\pyplot.py", line 950, in gca
return gcf().gca(**kwargs)
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\pyplot.py", line 586, in gcf
return figure()
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\pyplot.py", line 535, in figure
**kwargs)
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 81, in new_figure_manager
return new_figure_manager_given_figure(num, figure)
File "D:\workspace\PyTest\py3env\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 89, in new_figure_manager_given_figure
window = Tk.Tk()
File "C:\Python35\Lib\tkinter\__init__.py", line 1868, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: Can't find a usable tk.tcl in the following directories:
C:/Python35/lib/tcl8.6/tk8.6 C:/Python35/lib/tk8.6 D:/workspace/PyTest/py3env/lib/tk8.6 D:/workspace/PyTest/lib/tk8.6 D:/workspace/PyTest/py3env/library This probably means that tk wasn't installed properly.
报的错从“找不到Tcl”变成了“找不到Tk”!
难道说成功了?于是,我又如法炮制,把tk8.6文件夹从C:\Python35\tcl\复制到了C:\Python35\Lib\tcl8.6中。
然后就真的成功了!
这叫什么鬼问题嘛!╭(╯^╰)╮
好吧,就是提醒注意一下,在windows中的虚拟环境下,如果使用tk,注意tcl和tk的路径。可以把整个目录复制到tcl和tk的搜索路径中。至于这叫什么操作,我也不知道。
在windows下的虚拟环境中使用tk,要留神了的更多相关文章
- Windows下Git Bash中VIM打开文件中文乱码
Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 admin@DESKTOP-O99620V MINGW64 /d/项目GGE/Hard_for_GGE (master) ...
- python 在windows下的 虚拟环境
解决 python 环境问题 windows 下安装 pip install virtualenv virtualenv的基本使用 1.1 创建虚拟环境 virtualenv venv 为环境指定Py ...
- 【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优
libsvm中有进行参数调优的工具grid.py和easy.py可以使用,这些工具可以帮助我们选择更好的参数,减少自己参数选优带来的烦扰. 所需工具:libsvm.gnuplot 本机环境:Windo ...
- 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]
[注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...
- vmware player 在windows下nat模式中的端口映射
1.设置虚拟机nat共享的网卡为固定ip vmware虚拟机使用nat网络时,是VMware Network Adapter VMnet8网卡提供的nat服务.查看VMware Network Ada ...
- windows下在yii中使用mongodb
1.编译或下载对应dll动态链接库拓展文件,下载地址:点我,不知道如何编译windows下的dll拓展->点我 2.找到web服务器软件,如apache,nginx等webserver处理浏览器 ...
- python第二篇:windows 下virtualenvwrapper虚拟环境搭建
优点 安装过程 第一步:安装virtualenv pip install virtualenv 第二步:新建virtualenv virtualenv testvir 第三步:运行虚拟环境相关命令 进 ...
- Windows 环境下于虚拟环境中源码安装 cx_oracle
安装前提条件: (1).安装 instantclient-basic-nt (2).安装 instantclient-sdk-nt (3).安装 Microsoft Visual C++ Compil ...
- windows下python虚拟环境virtualenv安装和使用
前面介绍了python在ubuntu16.04环境下,python的虚拟环境virtualenv的安装,下面介绍在windows环境下的安装和使用. 环境信息 操作系统:windows10 pytho ...
随机推荐
- elasticsearch 分布式集群搭建
elasticsearch环境搭建及单节点搭建可参考我的上一篇:http://www.cnblogs.com/xuwenjin/p/8745624.html 本文以Elaticsearch 6.2.2 ...
- oracle数据同步
随着各行业信息化水平的不断提升,各种各样的信息管理系统都被广泛使用,各系统间数据完全独立,形成了大量的信息孤岛.出于管理及决策方面的需求,实现各平台的数据同步是一个很迫切的需求,TreeSoft数据库 ...
- Spring学习手札(一)
Spring能做什么 1. 能根据配置文件创建及组装对象之间的依赖关系: 2. 面向切面编程,能帮助我们无耦合的实现日志记录,性能统计,安全控制等: 3. 提供第三方数据访问框架(如Hibernate ...
- ASP.NET MVC 简单分页代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- ios虚拟机安装(二)
1)vmware快照功能 创建还原点:右键-->snapshot(对当前虚拟机系统备份) 2)虚拟机与外界系统通话 找到路径:/vmware/vmware workstation下的darwin ...
- Android 进程回收
1.Android 进程回收策略 众所周知,Android是基于Linux系统的.在Android进程回收策略中,Android进程与Linux进程根据OOM_ADJ阈值进行区分: OOM_ADJ & ...
- idea springboot应用启动
在idea里启动springboot应用最好使用 spring-boot:run 如果通过运行main方法启动应用,会找不到页面
- git bash 出现vim弹框的时候怎么退出
如果是输出状态,首先按Esc键退出输入状态,然后按Shift+“;”,再输入q!或wq!(不保存改动,wq!是保存文件的写入修改)退出. so easy!!
- 整理JavaScript循环数组和对象的方法
众所周知,常用的循环语句有for.while.do-while.for-in,forEach以及jQuery中提供的循环的方法:以及ES6中提供的很多用来循环对象的方法如map, 在 Javascri ...
- CCSUOJ评测系统
队名: BUGG 团队信息与分工: 开发: 周斌 B20150304221 舒 溢 B20150304209 测试: 许嘉荣 B20150304213 唐 浩 B20150304316 Product ...