#python #import #module #package
Вопрос:
В своем коде на python я использовал «из пакета импортировать модуль». И мой руководитель заметил, что это очень опасно. Он сказал, что правильный способ-это «импортировать packageA.ModuleA как модуль».
Есть какие-нибудь комментарии? Это действительно опасно? Или это больше похоже на обычную практику?
Комментарии:
1. Ваш начальник суеверен.
2. Иногда возникают проблемы , связанные с
from packageA.moduleA import *
тем, что на разных платформах действуют разные правила именования. Таким образом, Python будет извлекать__init__.py
файлы только в директориях packageA и ModuleA. Тем не менее,import packageA.moduleA
все будет в порядке, и импортируйте все модули вpackageA.moduleA
Ответ №1:
Я думаю, что использование import
зависит от конкретного проекта, потому что в некоторых ситуациях вы можете импортировать из модуля / пакета.
Из документации python:
Пакет: Модуль Python, который может содержать подмодули или рекурсивно, подпакеты. Технически пакет-это модуль Python с атрибутом пути.
Модуль: объект, который служит организационной единицей кода Python. Модули имеют пространство имен, содержащее произвольные объекты Python. Модули загружаются в Python в процессе импорта.
https://docs.python.org/3/reference/import.html
Так что я вижу это так:
Ваш импорт from packageA import moduleA
более уместен, например, при импорте переменной из модуля from math import pi
.
Я подозреваю, что вы пытаетесь импортировать из пакета (учитывая, что пакет содержит подмодули, вам необходимо правильно их вызвать, чтобы найти правильный путь к подмодулю, а также быть вызванным там, где это необходимо). В качестве примера, предполагая, что ваше имя пакета World
содержит следующие файлы (подмодули) в этой иерархии EuropeSpain
, импорт будет from World.Europe import Spain
Ответ №2:
Я действительно не работаю в отрасли и занимаюсь программированием как хобби, поэтому я не компетентен говорить о профессионализме, но лично я не вижу абсолютно никаких проблем, from A import B
кроме того, что это может создать некоторую путаницу при ссылках B
на ваш код, например:
from math import pi
print(pi)
против:
import math
print(math.pi)
Вторая версия облегчает понимание того, откуда pi
она взялась. Это также полезно, поскольку в нескольких импортируемых библиотеках может быть функция/метод с одинаковым именем. Одним из таких примеров этого является escape()
функция как в html
glob
библиотеках, так и в Python.
from html import escape
from glob import escape
print(help(escape))
Приведенный выше код выведет escape()
функцию glob
библиотеки, поскольку она была недавно импортирована оттуда.
import html
import glob
print(help(html.escape))
print(help(glob.escape))
Приведенный выше код различает, какой из них вы используете.
Это также может сработать:
from html import escape as h_escape
from glob import escape as g_escape
print(help(h_escape))
print(help(g_escape))
Этот приведенный выше код также различает эти две вещи. Но, опять же, я не эксперт в отрасли, поэтому я бы ничего не знал о требованиях к ИТ; но лично я сам не вижу в этом никаких проблем.
P.S. Я получил все это отсюда: 5 распространенных ошибок Python и как их исправить — Кори Шафер