Как импортировать модуль, но игнорируя __init__.py пакета?

Я пытаюсь импортировать функцию, которая находится в модуле внутри пакета в Python, но когда я пытаюсь:

from package.module import some_function

Python выполняет _init_.py пакета, но этого не происходит.

Есть ли способ импортировать функцию, говорящую Python игнорировать пакет _init_.py?


person Flávio J Vieira Caetano    schedule 07.12.2012    source источник
comment
Почему вы хотите игнорировать __init__.py   -  person Jakob Bowyer    schedule 07.12.2012
comment
Я не совсем понимаю, что вы имеете в виду, но этого не может быть. Но краткий ответ: нет, вы не можете заставить python игнорировать файл. Вероятно, есть и другие трюки, которые вы могли бы использовать с sys.path, чтобы заставить его работать, но в лучшем случае это будут хаки. Возможно, вы можете перестроить вещи так, чтобы вы __init__.py были пустыми? Или, по крайней мере, не вызывает нежелательных побочных эффектов?   -  person John Szakmeister    schedule 07.12.2012
comment
stackoverflow.com/questions/7533480 /   -  person Vatsal    schedule 12.03.2015
comment
Проверьте это, stackoverflow.com /вопросы/7533480/   -  person Vatsal    schedule 12.03.2015


Ответы (1)


Ответ: Нет, вы не можете импортировать пакет Python без выполнения __init__.py. По определению, чтобы создать пакет, вы должны поместить в этот каталог файл __init__.py.

Но вы можете создать пустой файл __init__.py.

Если вы хотите просто импортировать функцию из модуля, вы можете использовать:

import sys
sys.path.append('path_to_package/')

from module import some_function

Обратите внимание, что это грязное решение, и оно не всегда будет работать.

person kaspersky    schedule 07.12.2012
comment
Вы говорите, что это грязное решение, но что является наилучшей практикой, если вы хотите предоставить только одну конкретную функцию из модуля, в то время как в модуле определено несколько функций? - person stedes; 04.06.2020