Я знаю, что относительный импорт не рекомендуется, например, цитата из PEP8:Использование абсолютного импорта при разработке модулей Python?
Relative imports for intra-package imports are highly discouraged. Always use the absolute package path for all imports. Even now that PEP 328 is fully implemented in Python 2.5, its style of explicit relative imports is actively discouraged; absolute imports are more portable and usually more readable.
Что делать, если я занимаюсь разработкой пакета (с несколькими модулями)? В процессе разработки абсолютный импорт не будет работать без установки/развертывания пакета. Означает ли это, что мне приходится периодически устанавливать/разворачивать текущие модули WIP только для тестирования?
Вот пример, представленный Cld. Учитывая Python проект/пакет:
myproject/
package1/
__init__.py
somemodule.py
package2/
__init__.py
somemodule.py
somescript.py
main.py
В main.py
, абсолют-импорт работает очень хорошо:
import package1
import package2.somescript
import package2.somemodule
Однако для модулей, как somescript.py
в package2 следующие абсолютные-импорт:
import package2.somemodule
import package1
Это увеличит ImportError:
Traceback (most recent call last):
File "package2/somescript.py", line 1, in <module>
import package2.somemodule
ImportError: No module named package2.somemodule
Одним из подходов, которые вы можете предпринять, является включение корня вашего проекта в переменную окружения 'PYTHONPATH'. Тогда весь ваш импорт может быть «абсолютным» (т. Е. Относительно корня вашего проекта). – arghbleargh
Это может быть решением. – Drake