明示的な相対インポートは絶対インポートの代替として受け入れられる。
暗黙的な相対インポートは決して使用すべきではなく、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.path
PYTHONPATH
site-packages
つまり、Python 3 をサポートするパッケージを作成する場合は、パッケージ内で次のように記述する必要があります。
import mypkg.foo
または、明示的な相対インポートを使用します。
from . import foo