Python Windows環境 VirtualEnv で tcl ライブラリが見つからないエラーの対処

1.症状

VirtualEnvではない環境で、以下を実行すると、

  1. c:\>python
  2. Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
  3. Type "help", "copyright", "credits" or "license" for more information.
  4. >>> import turtle
  5. >>> turtle.forward(100)
  6. >>>

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

python_vent_tcl_err01

VirtualEnv環境でこれをやると、以下のように、Can’t find a usable init.tcl エラーとなってしまう。

  1. (math_env) C:\Programs\venv\math_env\Scripts>python
  2. Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
  3. Type "help", "copyright", "credits" or "license" for more information.
  4. >>> import turtle
  5. >>> turtle.forward(10)
  6. Traceback (most recent call last):
  7. File "", line 1, in
  8. File "", line 1, in forward
  9. File "C:\python27\Lib\lib-tk\turtle.py", line 3714, in _getpen
  10. Turtle._pen = Turtle()
  11. File "C:\python27\Lib\lib-tk\turtle.py", line 3703, in __init__
  12. Turtle._screen = Screen()
  13. File "C:\python27\Lib\lib-tk\turtle.py", line 3552, in Screen
  14. Turtle._screen = _Screen()
  15. File "C:\python27\Lib\lib-tk\turtle.py", line 3568, in __init__
  16. _Screen._root = self._root = _Root()
  17. File "C:\python27\Lib\lib-tk\turtle.py", line 458, in __init__
  18. TK.Tk.__init__(self)
  19. File "C:\python27\Lib\lib-tk\Tkinter.py", line 1810, in __init__
  20. self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
  21. _tkinter.TclError: Can't find a usable init.tcl in the following directories:
  22. 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
  23. brary C:/Programs/venv/library C:/Programs/venv/tcl8.5.15/library C:/Programs/tcl8.5.15/library
  24. 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" (パスは実際のインストールパスを指定)

  1. @echo off
  2. set "VIRTUAL_ENV=C:\Programs\venv\math_env"
  3.  
  4. if defined _OLD_VIRTUAL_PROMPT (
  5. set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
  6. ) else (
  7. if not defined PROMPT (
  8. set "PROMPT=$P$G"
  9. )
  10. set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
  11. )
  12. set "PROMPT=(math_env) %PROMPT%"
  13.  
  14. if not defined _OLD_VIRTUAL_PYTHONHOME (
  15. set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%"
  16. )
  17. set PYTHONHOME=
  18.  
  19. if defined _OLD_VIRTUAL_PATH (
  20. set "PATH=%_OLD_VIRTUAL_PATH%"
  21. ) else (
  22. set "_OLD_VIRTUAL_PATH=%PATH%"
  23. )
  24. set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%"
  25. set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
  26. :END

3.結果

タートルグラフィックが書きたかったわけではなくて、matplotlib のグラフ画面だそうとしたら、エラーが発生。対処したら、グラフ画面が表示されるようになった。

python_vent_tcl_err02

めでたしめでたし。

4.Eclipse + PyDev の対処

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

python_vent_tcl_err03

 

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import random
  4.  
  5. random_data = [random.randrange(0,10) for x in range(10)]
  6. fig,ax = plt.subplots()
  7. ax.bar(np.arange(10),random_data,1)
  8. plt.show()

 

python_vent_tcl_err04

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

Follow me!

コメントを残す

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