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からも動きましたよ。