https://teratail.com/questions/180478
の続きです。試行錯誤の結果、伺いたいことが変わってきたため、質問を立て直すことにしました。
現在直面している問題
ubuntuで、 pandasをimportしているpythonスクリプトがエラーを吐いて動いてくれません。
その原因と対処方法が皆目見当がつかないため、お知恵を拝借したいと考えています。
python
1# dftest1.py 2import pandas as pd 3 4df1 = pd.DataFrame({"date":( 5"2012-01-01 00:00:00", 6"2012-01-01 00:00:00", 7"2012-01-02 00:00:00", 8"2014-04-18 00:00:00")}) 9 10print(df1)
これをコマンドラインで実行しようとすると以下のようになってしまいます。python2.7と3.4が入っているのですが、どちらでもエラーとなってしまいます。
$ python3.4 ~/work/dftest1.py [ ~/raid/kiwa/analysis3 ] Traceback (most recent call last): File "/home/kdoi2/work/dftest1.py", line 2, in <module> import pandas as pd File "/usr/lib/python3/dist-packages/pandas/__init__.py", line 7, in <module> from pandas import hashtable, tslib, lib File "pandas/src/numpy.pxd", line 157, in init pandas.hashtable (pandas/hashtable.c:38262) File "/usr/lib/python3/dist-packages/numpy/__init__.py", line 153, in <module> from . import add_newdocs File "/usr/lib/python3/dist-packages/numpy/add_newdocs.py", line 13, in <module> from numpy.lib import add_newdoc File "/usr/lib/python3/dist-packages/numpy/lib/__init__.py", line 8, in <module> from .type_check import * File "/usr/lib/python3/dist-packages/numpy/lib/type_check.py", line 11, in <module> import numpy.core.numeric as _nx File "/usr/lib/python3/dist-packages/numpy/core/__init__.py", line 6, in <module> from . import multiarray SystemError: initialization of multiarray raised unreported exception $ python2.7 ~/work/dftest1.py [ ~/raid/kiwa/analysis3 ] PyCapsule_Import could not import module "datetime" Traceback (most recent call last): File "/home/kdoi2/work/dftest1.py", line 2, in <module> import pandas as pd File "/usr/lib/python2.7/dist-packages/pandas/__init__.py", line 6, in <module> from . import hashtable, tslib, lib File "numpy.pxd", line 157, in init pandas.hashtable (pandas/hashtable.c:21706) File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in <module> from . import add_newdocs File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module> from numpy.lib import add_newdoc File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 8, in <module> from .type_check import * File "/usr/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 11, in <module> import numpy.core.numeric as _nx File "/usr/lib/python2.7/dist-packages/numpy/core/__init__.py", line 6, in <module> from . import multiarray ImportError: PyCapsule_Import could not import module "datetime"
試したこと
実のところ以前は問題なくpandasが使えていました。今週、別のスクリプトを試そうとして動かなかったため原因を究明しようとしてこの事態に気づきました。
不思議なことにipythonから%runで呼び出すとちゃんと実行されます。更に、先の質問の後で試行錯誤したところ、次のようにすれば問題なく実行されることを確認しました。
$ python2.7 < ~/work/dftest1.py [ ~/raid/kiwa/analysis3 ] date 0 2012-01-01 00:00:00 1 2012-01-01 00:00:00 2 2012-01-02 00:00:00 3 2014-04-18 00:00:00
先の質問では、共有ライブラリの読み込み失敗の可能性を示唆していただきましたが、なぜ失敗するのか。ライブラリのインストールに失敗している、あるいは関連ファイルを誤って消去したり破壊したりと言ったことは考えられません。それでは上記のうまく行く状況が説明がつかないですから。
https://teratail.com/questions/180478
にも書いた通り、ライブラリの再インストールもやってみましたが事態は変化しません。既にライブラリはインストールされてるよというメッセージが返ってくるばかりです。
補足情報(FW/ツールのバージョンなど)
環境:
$ uname -a Linux kdoi 3.13.0-163-generic #213-Ubuntu SMP Thu Nov 15 02:19:07 UTC 2018 x86_64
ライブラリの確認:
#apt install python3-pandas Reading package lists... Done Building dependency tree Reading state information... Done python3-pandas is already the newest version. (中略) Use 'apt-get autoremove' to remove them. 0 upgraded, 0 newly installed, 0 to remove and 173 not upgraded.
まとめ
あらためて質問項目を列挙しておきます。
0. pythonスクリプト実行時にpandasの関連ライブラリ読み込みに失敗する理由として何が考えられるか。
0. python script.py
とpython < script.py
で挙動が異なるのはなぜか。
0. 事態を解決し、つつがなくpython script.py
できるようにするには何をすればよいか。
解決
まず質問文に不正確な記述があったことをお詫びせねばなりません。実際に行った確認作業は次のようなものでした。
cd ~ python2.7 ~/work/dftest1.py ... python2.7 < ~/work/dftest1.py
問題の直接の原因は~/workにdatetime.pycというファイルが存在していたことにありました。当該ディレクトリは実験や勉強のために試作スクリプトを色々作り置いている場所で、自分でも覚えていませんがおそらくpythonを勉強し始めた初期のころに間違えて作ってしまったのだと思われます。datetime.pyというファイルが悪さをしている可能性は疑っていたのですが、.pycは盲点でした。
そして、モジュールのサーチパスに関して私は認識不足でした。
スクリプト名を引数として直接指定した場合は、そのスクリプトが存在するディレクトリがサーチパスの先頭に追加される。しかし、標準入力からリダイレクトで流し込んだ時は、スクリプトファイル名をpython自体は与り知らないので、その場所がサーチパスに追加されることはない。これが「挙動が異なった」原因でした。
~/work/datetime.pycを消去したところ、あっさり実行に成功です。わかってみれば下らない理由でした……。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。