Что такое неявный относительный импорт 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