私はかなり奇妙なシナリオを持っています。私は非常に古いインストールで実行しているので、使用するツールのほとんどをコンパイルしました。
まず、これはサーバーです。これは、SSH 接続によって排他的に使用されます。しかし、このサーバーをセットアップした人は、いくつかの奇妙な選択をしました。個別のユーザーを作成する代わりに、fphyiscs という名前のログイン ユーザーが 1 人存在し、ホーム ディレクトリは /home/fphysics になります。(アクセスは公開鍵/秘密鍵認証によって厳密に制御されます。したがって、全員が「fphysics」としてログインしますが、パスワードはありません。) 次に、この中に「プロファイル」ディレクトリがあります。たとえば、私の場合は /home/fphysics/joelfred です。ログイン時に fphysics によって実行されるスクリプトがあり、/home/fphysics 内のディレクトリを調べて、これらを「プロファイル」として解釈します。次に、使用する「プロファイル」を選択できます。次に、スクリプトは、このプロファイル ディレクトリにある「ENVS」というファイルを読み込みます。
これはおかしいと思いました。しかし、私はシステム管理者と議論するよりもよく知っています. だから私はこのシステムの中で働いています。おそらく意図したように環境変数を設定するだけでなく、より従来の .bash_profile をソースとするように ENVS を設定しました。ENVS で HOME 環境変数を設定しました: export HOME=/home/fphysics/joelfred。このシステムのソフトウェアは非常に古いため、$HOME/opt というプレフィックスを使用して、独自のものを大量にコンパイルしました。したがって、私のパスには $HOME/opt/bin が含まれるようになりました。/home/fphysics/.Xauthority を /home/fphyiscs/joelfred/.Xauthority にシンボリック リンクしたので、x セッションは SSH 経由で動作します。正直なところ、これをより正常に動作させるために行ったハックなことをすべて覚えているわけではないので、より最新のソフトウェアにアクセスできます。(たとえば、GCC は v4.1.2、copyright 2006 です。)
それ以来、GTK3Agg バックエンドを使用して、Matplotlib をコンパイルしてインストールしようとしました。もちろん、これは、多くの x ライブラリ、GTK、pygobject などをコンパイルしなければならなかったことを意味します。途中で、DBUS をコンパイルしなければなりませんでした。今、興味深い/迷惑なMatplotlibの動作がいくつかあります。たとえば、これは期待どおりに機能します。
fphysics@facet-srv01 ~$ ipython
Python 2.7.3 (default, Apr 30 2013, 00:58:45)
Type "copyright", "credits" or "license" for more information.
IPython 0.13.2 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import matplotlib.pyplot as plt
** (ipython:1648): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-oWyQu0DxxF: Connection refused
In [2]: import numpy as np
In [3]: x=np.linspace(-10,10,100)
In [4]: y=x*x
In [5]: plt.plot(x,y)
Out[5]: [<matplotlib.lines.Line2D at 0xacb2eec>]
In [6]: plt.show()
これは期待どおりに機能します。放物線のプロットが表示されます。ipython ターミナルをブロックするウィンドウが表示されます。私が知る限り、ウィンドウは完全な機能を備えています。閉じると、ipython ターミナルに戻ります。ただし、奇妙な dbus エラーに注意してください。 /tmp/dbus-oWyQu0DxxF のアイデアを取得するアイデアはありません。私は見ましたが、わかりません。
わかった。だから今、インタラクティブモードをオンにしたい:
fphysics@facet-srv01 ~$ ipython
Python 2.7.3 (default, Apr 30 2013, 00:58:45)
Type "copyright", "credits" or "license" for more information.
IPython 0.13.2 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import matplotlib.pyplot as plt
** (ipython:4181): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-oWyQu0DxxF: Connection refused
In [2]: import numpy as np
In [3]: plt.ion()
In [4]: x=np.linspace(-10,10,100)
In [5]: y=x*x
In [6]: plt.plot(x,y)
Out[6]: [<matplotlib.lines.Line2D at 0xb0f1fcc>]
私は何も得ません。変。私はショーを試します:
In [7]: plt.show()
何もない。私は引き分けを試みます:
In [8]: plt.draw()
「Figure 1」というタイトルのウィンドウが表示されますが、灰色です。私は別の抽選を試みます:
In [9]: plt.draw()
これで、放物線のある窓ができました。しかし、どのボタンも機能しません。窓を閉めることもできません。だから私は閉じようとします:
In [10]: plt.close()
何も起こりません。わかった。ipython ターミナルを終了します。
In [11]: exit
ウィンドウは消えますが、エラーはありません。しかし、ショーや抽選を行わなかったり、単に終了したりした場合はどうなりますか? 奇妙なエラーが発生します:
fphysics@facet-srv01 ~$ ipython
Python 2.7.3 (default, Apr 30 2013, 00:58:45)
Type "copyright", "credits" or "license" for more information.
IPython 0.13.2 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import matplotlib.pyplot as plt
** (ipython:7262): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-oWyQu0DxxF: Connection refused
In [2]: import numpy as np
In [3]: plt.ion()
In [4]: x=np.linspace(-10,10,100)
In [5]: y=x*x
In [6]: plt.plot(x,y)
Out[6]: [<matplotlib.lines.Line2D at 0xb636bf6c>]
In [7]: exit
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/home/fphysics/joelfred/opt/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "/home/fphysics/joelfred/opt/lib/python2.7/site-packages/matplotlib/_pylab_helpers.py", line 87, in destroy_all
manager.destroy()
File "/home/fphysics/joelfred/opt/lib/python2.7/site-packages/matplotlib/backends/backend_gtk3.py", line 415, in destroy
self.canvas.destroy()
AttributeError: FigureManagerGTK3Agg instance has no attribute 'canvas'
Error in sys.exitfunc:
Traceback (most recent call last):
File "/home/fphysics/joelfred/opt/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "/home/fphysics/joelfred/opt/lib/python2.7/site-packages/matplotlib/_pylab_helpers.py", line 87, in destroy_all
manager.destroy()
File "/home/fphysics/joelfred/opt/lib/python2.7/site-packages/matplotlib/backends/backend_gtk3.py", line 415, in destroy
self.canvas.destroy()
AttributeError: FigureManagerGTK3Agg instance has no attribute 'canvas'
だから私は dbus を掘り下げました - 私が見ることができる唯一のエラーは、物事に影響を与えている可能性があります。どうやら2つのインストールがあります。
fphysics@facet-srv01 ~$ $HOME/opt/bin/dbus-daemon --version
D-Bus Message Bus Daemon 1.7.2
Copyright (C) 2002, 2003 Red Hat, Inc., CodeFactory AB, and others
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
fphysics@facet-srv01 ~$ /bin/dbus-daemon --version
D-Bus Message Bus Daemon 1.1.2
Copyright (C) 2002, 2003 Red Hat, Inc., CodeFactory AB, and others
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
多分彼らは競争していますか?知らない。/home/fphysics/.dbus を /home/fphysics/joelfred/.dbus にシンボリック リンクしました。それは役に立たないようです。私は途方に暮れています。何が起こっているのかわかりません。これをどのように診断しますか?私のシナリオで dbus を動作させるにはどうすればよいですか? より基本的なレベルでテストするにはどうすればよいですか? 世界で何が起こっているのですか??
ところで、Ipython を使用するとテストが簡単になりますが、Python プロンプトから実行しても動作は同じです。