プロが教える店舗&オフィスのセキュリティ対策術

目的:pythonで数値計算した結果をgnuplotで出力したい。
要点:Gnuplot を import できてもグラフを表示できない。
OS : Mac OS X 10.5

まず、SorceForge から
・numerical python (numpy-1.5.1-py2.7-python.org-macosx10.3)
・gnuplot.py (gnuplot-py-1.8.tar)
をダウンロードしました。

次にterminalで上のそれぞれのファイルがあるディレクトリにいって、
>> python setup.py install
としました。どうやら成功した模様です。
numpy と Gnuplot というフォルダが
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
というディレクトリにできています。

そして、IDLE の python shell で
>>> import numpy
>>> import Gnuplot
としました。無事完了します。ここまではOKです。

しかし、試しに python shell から gnuplot で表示してみようとすると、IOError: [Errno 32] Broken pipe というエラーを表示します。たとえば、上に書いたディレクトリのGnuplot というフォルダの中に、test.py というスクリプトがあって、IDLE で開いて実行すると、次のような表示が出ます:

This program exercises many of the features of Gnuplot.py. The
commands that are actually sent to gnuplot are printed for your
enjoyment.
Popping up a blank gnuplot window on your screen.
Press return to show results...
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/demo.py", line 110, in <module>
demo()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/demo.py", line 28, in demo
g = Gnuplot.Gnuplot(debug=1)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/_Gnuplot.py", line 187, in __init__
self('set terminal %s' % (gp.GnuplotOpts.default_term,))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/_Gnuplot.py", line 210, in __call__
self.gnuplot(s)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/gp_macosx.py", line 144, in __call__
self.flush()
IOError: [Errno 32] Broken pipe

他のスクリプトを実行してみると、次の4つを除き正常に実行されます;
_init.py, demo.py, test.py, gp_mac.py
ただし、gp_mac.py だけは IOError: [Errno 32] Broken pipe ではなく、
ImportError: No module named Required_Suite
というエラーです。

何が原因でしょうか?これを解決するにはどうしたらよいのでしょうか?

A 回答 (4件)

まず。


このようなモジュールは、setup.pyを実行したPythonのバージョン専用にインストールされます。
.../site-packages_py2.7/Gnuplot
というインストール先からわかります。
python2.5.5から使うには、Python2.5.5でsetup.py installを実行する必要があります。


os.environ['PATH']の結果からして、IDLEを直接実行したときには、gnuplotのある/opt/local/binにパスが通っていないのがわかります。

・IDLEを実行するときはターミナルから open -a IDLE.app で実行する
・IDLEで os.environ['PATH']='/opt/local/bin:' + os.environ['PATH'] などとして、PATHに/opt/local/bin を追加する
・gp_macosx.py の gnuplot_command = 'gnuplot' を gnuplot_command = '/opt/local/bin/gnuplot'と変える

といったように、gnuplotへアクセスできるようにすれば動くと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!無事 IDLE でも出ました.
なるほど PATH が通ってなかったんですね.
gnuplot_command = '/opt/local/bin/gnuplot' で成功しました.

お礼日時:2010/11/25 23:55

> gnuplot -version


>>> os.system("gnuplot -version")

ハイフンは2つです。
とは言え、後の表示を見ると、一応gnuplotを呼び出せているようです。

> .../site-packages_py2.7/Gnuplot$ sudo ./test.py    # 単に ./test としたら permission denied だったので

失礼しました。
tar.gzに入っている方には実行属性がついていたので、site-packageの方にも付いているものと思い確認していませんでした。
./test.py → python test.py
./demo.py → python demo.py
に置き換えて実行してみてください。

これで(ところどころでエラーになりつつも)動くようなら、IDLEでのPATHの設定がbashと異なっている可能性が考えられます。
import os
print os.environ['PATH']
とでもして、IDLEと、ターミナルから起動したPythonとで比べてみてください。


これでもBronken pipeだと、ちょっと私にはわかりかねます。

この回答への補足

$ gnuplot --version
gnuplot 4.4 patchlevel 0


python2.5 で同じことをやりなおしてみたらできました。グラフの表示まで。
ただし terminal でだけ。
IDLE の python2.5 shell では、import Gnuplot もできませんでした。
python2.7 は今回の新しくダウンロードしただけだからなのかな?
なら紛らわしいから捨ててしまおう、と思って Finder でpython2.7 関連のものをゴミ箱に捨てました。
そうしてまた python2.5で import Gnuplot してみたら ImportError: No module named Gnuplot となってしまいました。
がんばって復元してみます。やり直した方が早いかもしれません。
いずれにせよ terminal では問題ないということでしょう。

terminalでは
>>> import os
>>> print os.environ['PATH']
/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/Current/bin
:/opt/local/bin:/opt/local/sbin:/Users/****/bin:/Developer/Tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
:/usr/texbin:/usr/X11/bin

IDLE では
>>> import os
>>> print os.environ['PATH']
/usr/bin:/bin:/usr/sbin:/sbin

どう直せばいいのでしょうか?

ともあれ、今日はありがとうございました。

補足日時:2010/11/25 01:43
    • good
    • 0
この回答へのお礼

Aquaemacs で gnuplot の表示ができたのでもう大丈夫です。お世話になりました。

お礼日時:2010/11/25 21:04

はて?


手許のMac(OS10.6.5, pyhton2.6.6, gnuplot4.4.2)で実験したところ、

gnuplotがインストールされた状態
→ 一応動作(詳細は 後述)
gnuplotをアンインストールした状態
→ ほぼ同じエラーメッセージ

となるので、gnuplotにアクセスできていない、ということになると思うのですが。

・ターミナルから which gnuplot でgnuplotのパスは表示されるか?
・ターミナルから gnuplot --version としてgnuplotのバージョンが表示されるか?
・Python Shellから
import os
os.system("gnuplot --version")
でバージョンが表示されるか?戻り値が0になっているか?
・ターミナルから、demo.py, test.pyのあるディレクリに移動して
./test.py
./demo.py
とするとどうなるか?

というあたりを確認してみてください。

なお、前述「一応動作」とあるのは、Gnuplot.py自体が古いため、gnuplot 4.4ではエラーになるコマンドを出力するためです。
demo.pyで使われたコマンド
set data style linespoints
gnuplot4.4での書式
set style data linespoints

この回答への補足

$ which gnuplot
/opt/local/bin/gnuplot

$ gnuplot -version
Cannot open load file '-version'
line 0: util.c: No such file or directory

python shell
>>> import os
>>> os.system("gnuplot -version")
Cannot open load file '-version'
line 0: util.c: No such file or directory

256

.../site-packages_py2.7/Gnuplotshimuraakihiko$ sudo ./test.py    # 単に ./test としたら permission denied だったので
Password:
sudo: ./test.py: command not found

.../site-packages_py2.7/Gnuplotshimuraakihiko$ sudo ./demo.py
sudo: ./demo.py: command not found

という結果です。

補足日時:2010/11/24 21:35
    • good
    • 0

念のため確認ですが, gnuplot は入ってますよね?

この回答への補足

はい、gnuplot-4.4.0 が入っています。

補足日時:2010/11/24 18:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!