私のDebianスクイーズシステムで、Pythonの問題が発生しました。これは、次のように抽出できます。
import numpy
import datetime
from matplotlib import pyplot
x = [datetime.datetime.utcfromtimestamp(i) for i in numpy.arange(100000,200000,3600)]
y = range(len(x))
# See matplotlib handle a series of datetimes just fine..
pyplot.plot(x, y)
# [<matplotlib.lines.Line2D object at 0xad10f4c>]
import pandas
# Now we try exactly what we did before..
pyplot.plot(x, y)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/pymodules/python2.6/matplotlib/pyplot.py", line 2141, in plot
ret = ax.plot(*args, **kwargs)
File "/usr/lib/pymodules/python2.6/matplotlib/axes.py", line 3432, in plot
for line in self._get_lines(*args, **kwargs):
File "/usr/lib/pymodules/python2.6/matplotlib/axes.py", line 311, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "/usr/lib/pymodules/python2.6/matplotlib/axes.py", line 288, in _plot_args
x, y = self._xy_from_xy(x, y)
File "/usr/lib/pymodules/python2.6/matplotlib/axes.py", line 204, in _xy_from_xy
bx = self.axes.xaxis.update_units(x)
File "/usr/lib/pymodules/python2.6/matplotlib/axis.py", line 982, in update_units
self._update_axisinfo()
File "/usr/lib/pymodules/python2.6/matplotlib/axis.py", line 994, in _update_axisinfo
info = self.converter.axisinfo(self.units, self)
File "/usr/local/lib/python2.6/dist-packages/pandas/tseries/converter.py", line 184, in axisinfo
majfmt = PandasAutoDateFormatter(majloc, tz=tz)
File "/usr/local/lib/python2.6/dist-packages/pandas/tseries/converter.py", line 195, in __init__
dates.AutoDateFormatter.__init__(self, locator, tz, defaultfmt)
TypeError: __init__() takes at most 3 arguments (4 given)
示されている特定のエラーの原因には興味がありません。パンダが異なるバージョンのmatplotlibを期待していたことは明らかです。これは、一方のパッケージを標準のdebianリポジトリから取得し、もう一方のパッケージをpipを介して取得するかなりのリスクです。 pipがmatplotlibをアップグレードできるようにすることで、問題のその部分を解決しました。
本当の問題は-そして今、3つの質問があります:パンダをインポートするだけで、2行前のパンダが明らかに同じ操作に関与していなかったときに、matplotlibの日時オブジェクトを処理する機能が壊れたのはどうしてですか?インポート時にパンダは、トップレベルの名前空間内の他のモジュールをサイレントに変更して、パンダメソッドを使用するように強制しますか?そして、これはPythonモジュールにとって許容できる動作ですか?たとえば、乱数モジュールをインポートしても、書き込みすべてにランダムソルトを適用するためにピクルスモジュールなどがサイレントに変更されないことを信頼できる必要があるためです。
詳細情報で更新
pythonは2.6.6です(パッケージ2.6.6-3 + squeeze7からの現在のDebian安定版)
matplotlibのバージョンはdebianの0.99.3-1(パッケージpython-matplotlibからの現在のdebian安定版)でした
pandasのバージョンは0.9.0でした(「pipinstall pandas」でインストールされましたが、少し前ですが、今日ではありません)
プラットフォームはdebianSqueezeを実行しているi386です
複製する手順
- (明らか)クリーンなdebian squeeze i386インストールをブートストラップし、chrootします。
- apt-get update
- apt-get install python python-matplotlib
- apt-get install python-pip build-essential python-dev
- pip install --upgrade numpy
- pip install pandas
次に、インタラクティブなPythonセッションを開始します
import numpy
import datetime
# Next two lines added to original example to avoid hassle with DISPLAY in chroot
import matplotlib
matplotlib.use('agg')
from matplotlib import pyplot
x = [datetime.datetime.utcfromtimestamp(i) for i in numpy.arange(100000,200000,3600)]
y = range(len(x))
pyplot.plot(x, y)
import pandas
pyplot.plot(x, y)