#python #python-3.x #python-import
#python #python-3.x #python-импорт
Вопрос:
Иногда между приложением и внутренним файлом в пакете стороннего производителя возникают коллизии имен модулей. Например, файл с именем, profile.py
находящимся в текущей папке, приведет jupyter notebook
к аварийному завершению работы при попытке импортировать его вместо своего собственного profile.py
. Каков хороший способ избежать этой проблемы с точки зрения пользователя пакета? (Или это то, что разработчик пакета должен каким-то образом предотвратить?)
Примечание: хотя подобная проблема возникает из-за конфликта между приложениями и встроенными именами (например, time.py
или socket.py
), по крайней мере, относительно легко запомнить имена стандартных библиотечных модулей и других встроенных объектов.
Ответ №1:
Текущий каталог — это каталог, который содержит основной скрипт приложения. Если вы хотите избежать конфликтов имен в этом каталоге, не размещайте в нем никаких модулей.
Вместо этого используйте пространство имен. Создайте пакет с уникальным именем в каталоге основного скрипта и импортируйте все из него. Основной скрипт должен быть очень простым и не содержать ничего, кроме этого:
if __name__ == '__main__':
from mypackage import myapp
myapp.run()
Все модули внутри пакета также должны использовать from
импорт для доступа к другим модулям внутри пакета. Например, myapp.py
может содержать:
from mypackage import profile