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)
>>>

ウィンドウが立ち上がり、線が描画されるが、

python_vent_tcl_err01

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 のグラフ画面だそうとしたら、エラーが発生。対処したら、グラフ画面が表示されるようになった。

python_vent_tcl_err02

めでたしめでたし。

4.Eclipse + PyDev の対処

と、思ったが、PyDev で試したら同様のエラーが発生。Window – Preference から、PyDev – Interpreters ー Python Interpreter の Environment に、TCL_LIBRARY を設定

python_vent_tcl_err03

 

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()

 

python_vent_tcl_err04

OK! PyDevからも動きましたよ。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です