1. ホーム
  2. パイソン

Python】import pandas, error pandas Missing required dependencies ['numpy'] Reason Analysis

2022-01-22 11:30:17
<パス <ブロッククオート

結論から言うと を使用する場合 import pandas を同じディレクトリに置くと はありません。 unittest.py 同名のファイル と同じになります。 pandas がついてきます。 unittest のコンフリクトが発生するため import pandas は失敗します。


エラー使用シナリオのレプリケーション

testpandas.pyが作成され、同じレベルのディレクトリにunittest.pyが作成されます。
testpandas.pyでpandasをインポートし、実行したところ、エラーが発生しました。


エラーメッセージ

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\pandas\__init__.py", line 13, in <module>
    __import__(dependency)
  File "C:\Python27\lib\site-packages\numpy\__init__.py", line 187, in <module>
    from .testing import Tester
  File "C:\Python27\lib\site-packages\numpy\testing\__init__.py", line 10, in <module>
    from unittest import TestCase
ImportError: cannot import name TestCase
Traceback (most recent call last):
  File "C:/Users/Bug/PycharmProjects/md-jobs-latest/app/mdjob/testpandas.py", line 8, in <module>
    import pandas
  File "C:\Python27\lib\site-packages\pandas\__init__.py", line 20, in <module>
    "Missing required dependencies {0}".format(missing_dependencies))
ImportError: Missing required dependencies ['numpy']



原因分析

報告されたエラーに基づき、以下の項目を確認します。 C:\Python27\lib\site-packages\numpy\testing\__init__.py のソースコードは、以下の通りです。

"""Common test support for all numpy test scripts.

This single module should provide all the common functionality for numpy tests
in a single location, so that test scripts can just import it and work right
away.

"""
from __future__ import division, absolute_import, print_function

from unittest import TestCase

from . _private.utils import *
from . _private import decorators as dec
from . _private.nosetester import (
    run_module_suite, NoseTester as Tester
    )

__all__ = _private.utils.__all__ + ['TestCase', 'run_module_suite']

from numpy._pytesttester import PytestTester
test = PytestTester(__name__)
del PytestTester



ご覧のように、10行目の from unittest import TestCase testpandas.py と同じレベルのディレクトリにある unittest (作成したもの)は同名でコンフリクトを発生させます。

つまり unittest にはありません。 TestCase . というのも理解できる。 unittest 名前が公式を汚染している unittest を誤って参照し、自作した unittest というエラーが表示されます。


解決方法

の場合は import pandas が同じレベルのディレクトリにあるとき がない場合は unittest.py と同じ名前のファイルが そうでない場合は pandas がついてきます。 unittest のコンフリクトが発生するため import pandas は失敗します。


拡大表示:から 未来 インポートabsolute_importの役割

について from __future__ import absolute_import 何をするのか
直感的には、"を意味します。 この新機能の絶対的な導入を追加する "です。絶対的な導入というと、もちろん相対的な導入のことを考えますよね。
では、相対的導入とは何でしょうか。例えば、次のようなパッケージ構造があるとします。

pkg/
pkg/init.py
pkg/main.py
pkg/string.py


に新しい行を追加すると main.py と書くと import string とすると、Python 2.4 以前では、Python はまずカレントディレクトリで string.py を探し、見つかったらそのモジュールを取り込んで、main.py で直接 string を使えるようにします。もし本当に string.py を使いたいのであれば、それはそれでよいのですが、もし標準の string.py は?では、同じディレクトリにあるstring.pyを無視して、システムに付属する標準のstring.pyを持ってくる良いクリーンな方法はないでしょう。 from __future__ import absolute_import そこで、absolute_importをインポートする必要があります。 このようにすると import string を持ち込んで、システム標準の string.py を使用しながら from pkg import string のカレントディレクトリを持ち込むために string.py をカレントディレクトリに