Pythonの暗黙的な相対インポートとは何ですか?質問する

Pythonの暗黙的な相対インポートとは何ですか?質問する

PEP 8 - Python コードのスタイル ガイド

明示的な相対インポートは絶対インポートの代替として受け入れられる。

暗黙的な相対インポートは決して使用すべきではなく、Python3 では削除されました。

Python の暗黙的な相対インポートとは何ですか?

暗黙のインポートはアルゴリズムである

現在のパッケージディレクトリから最終的なパッケージの親に到達するまで検索します。
-- から相対インポートの実装

誰か詳しく説明してくれませんか?

Python3 では削除されましたか?

python2 -c 'import csv; print(csv)'
<module 'csv' from '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.pyc'>

$ touch csv.py

$ python2 -c 'import csv; print(csv)'
<module 'csv' from 'csv.pyc'>

# In python3 still search from current package
$ python3 -c 'import csv; print(csv)'
<module 'csv' from '/path_to/csv.py'>

pep-0008 ではなぜ使用しないことを推奨しているのでしょうか?

ベストアンサー1

あなたが言う時:

import foo

Python 2 では、まず呼び出し元のディレクトリを検索します。Python 3 では、これは実行されず、( 、など)fooなどの通常の場所のみで検索されます。sys.pathPYTHONPATHsite-packages

つまり、Python 3 をサポートするパッケージを作成する場合は、パッケージ内で次のように記述する必要があります。

import mypkg.foo

または、明示的な相対インポートを使用します。

from . import foo

おすすめ記事