Python Windows環境 VirtualEnv で tcl ライブラリが見つからないエラーの対処
1.症状
VirtualEnvではない環境で、以下を実行すると、
c:\>python Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import turtle >>> turtle.forward(100) >>>
ウィンドウが立ち上がり、線が描画されるが、
VirtualEnv環境でこれをやると、以下のように、Can’t find a usable init.tcl エラーとなってしまう。
(math_env) C:\Programs\venv\math_env\Scripts>python Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import turtle >>> turtle.forward(10) Traceback (most recent call last): File "", line 1, in File " ", line 1, in forward File "C:\python27\Lib\lib-tk\turtle.py", line 3714, in _getpen Turtle._pen = Turtle() File "C:\python27\Lib\lib-tk\turtle.py", line 3703, in __init__ Turtle._screen = Screen() File "C:\python27\Lib\lib-tk\turtle.py", line 3552, in Screen Turtle._screen = _Screen() File "C:\python27\Lib\lib-tk\turtle.py", line 3568, in __init__ _Screen._root = self._root = _Root() File "C:\python27\Lib\lib-tk\turtle.py", line 458, in __init__ TK.Tk.__init__(self) File "C:\python27\Lib\lib-tk\Tkinter.py", line 1810, 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:/python27/lib/tcl8.5 C:/Programs/venv/math_env/lib/tcl8.5 C:/Programs/venv/lib/tcl8.5 C:/Programs/venv/math_env/li brary C:/Programs/venv/library C:/Programs/venv/tcl8.5.15/library C:/Programs/tcl8.5.15/library This probably means that Tcl wasn't installed properly.
2.対処
http://stackoverflow.com/questions/15884075/tkinter-in-a-virtualenv
VirtualEnv Script ディレクトリの activate.bat に、以下を追記
set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5" (パスは実際のインストールパスを指定)
@echo off set "VIRTUAL_ENV=C:\Programs\venv\math_env" if defined _OLD_VIRTUAL_PROMPT ( set "PROMPT=%_OLD_VIRTUAL_PROMPT%" ) else ( if not defined PROMPT ( set "PROMPT=$P$G" ) set "_OLD_VIRTUAL_PROMPT=%PROMPT%" ) set "PROMPT=(math_env) %PROMPT%" if not defined _OLD_VIRTUAL_PYTHONHOME ( set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%" ) set PYTHONHOME= if defined _OLD_VIRTUAL_PATH ( set "PATH=%_OLD_VIRTUAL_PATH%" ) else ( set "_OLD_VIRTUAL_PATH=%PATH%" ) set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%" set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5" :END
3.結果
タートルグラフィックが書きたかったわけではなくて、matplotlib のグラフ画面だそうとしたら、エラーが発生。対処したら、グラフ画面が表示されるようになった。
めでたしめでたし。
4.Eclipse + PyDev の対処
と、思ったが、PyDev で試したら同様のエラーが発生。Window – Preference から、PyDev – Interpreters ー Python Interpreter の Environment に、TCL_LIBRARY を設定
import numpy as np import matplotlib.pyplot as plt import random random_data = [random.randrange(0,10) for x in range(10)] fig,ax = plt.subplots() ax.bar(np.arange(10),random_data,1) plt.show()
OK! PyDevからも動きましたよ。