Ответ 1
Вам понадобится __init__.py
в каталоге mydir (и он может быть пустым), а затем, если dir находится в пути sys, если ваш MySampleClass находится в myfile.py и myfile.py находится в mydir
from mydir.myfile import MySampleClass
Если вы хотите импортировать функции верхнего уровня из файла util.py, которые находятся в subdirA в myfile.py(где ваш класс), то __init__.py
должен быть в subdirA, а затем в myfile.py
from subdirA.util import somefunc, someotherfunc
То же самое относится к пути sys, то есть вы должны либо начать с 'dir', либо добавить его. Все импортируется с верхнего уровня пакета (обычно это папка проекта).
Однако для тестирования модулей, где вы можете запустить функцию из утилиты в интерпретаторе, если вы начинаете с subdirA, вам нужно будет добавить dir в путь sys, чтобы ваш импорт мог разрешиться.
>>> import sys
>>> sys.path.append('../dir')
но это взломать и было бы предпочтительнее использовать только интерпретатор при тестировании. Вы также можете добавить 'dir' в пакеты вашего сайта в p-м файле.
Чтобы использовать относительный импорт, вам понадобится более глубокая вложенная папка, например subdirA/subdirofA, а затем в subdirofA, которую вы могли бы использовать. для возврата (например, from .subdirB
). Действительно, для меня относительный импорт довольно сложно увидеть полезность. Мне лучше использовать прямой импорт по отношению к каталогу проекта, но я мог видеть, что они полезны, если вы хотите вложить наивный подпакет, но опять же лучше быть явным, чем подразумеваемым, если это возможно.
также см. this