Что такое неявный относительный импорт Python

В PEP 8 - Руководство по стилю для кода Python

Явный относительный импорт является приемлемой альтернативой абсолютным импортам

Неявный относительный импорт никогда не должен использоваться и был удален в Python3.

Что такое неявный относительный импорт Python?

Неявный импорт - это алгоритм

Поиск из текущего каталога пакетов до тех пор, пока не пострадает конечный родитель пакетов.
- Из https://www.python.org/dev/peps/pep-0328/#rationale-for-relative-imports

Может кто-нибудь объяснить это подробно?

Удалено в 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