在windows下的虛擬環境中使用tk,要留神了

來源:互聯網
上載者:User

標籤:director   提醒   erro   manager   class   我的電腦   led   linux系統   png   

事情是這樣的:有朋友在學慣用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/libraryThis probably means that Tcl wasn‘t installed properly.

 

經過分析,我想這是因為沒有找到tkinter,而matplotlib需要用到這個。可是這東西裝python時候是預設的,我肯定會裝的。我翻了翻我的電腦,Tcl確實是裝了的:

 

可是路徑不對。經群裡的同學指導,我還特意在主環境下測試了一下tk和tcl環境:

import tkinterroot = tkinter.Tk()print(root.tk.exprstring(‘$tcl_library‘))print(root.tk.exprstring(‘$tk_library‘))

 

在主環境中結果也是正常的:

C:\Python35\tcl\tcl8.6C:/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/libraryThis probably means that Tcl wasn‘t installed properly.

 

這可就尷尬了。

但是,我又注意到一個細節:Tcl在尋找環境的時候,會尋找原生主python環境,比如剛才那段報錯中,Tcl尋找了這樣兩個環境:

C:/Python35/lib/tcl8.6D:/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/libraryThis 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,要留神了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.