Привет, у меня есть такая файловая структура
Folder
Common
foo1.py
TestFolder
foo2.py
Я хочу импортировать в foo2.py foo1.py. Я пытался, но это не работает на Ubuntu:
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
Как Python находит свои модули
Строго взятый, модуль является единственным файлом Python, в то время как пакет является папкой, содержащей файлы Python, сопровождаемый (может быть пустым), названный файл __init__.py
, для сообщения Python, это - пакет для импорта модулей из. В обоих случаях модулям нужен их .py
расширение, но импорт их обходится без (см. далее ниже).
По умолчанию Python ищет свои модули и пакеты в $PYTHONPATH
.
Для обнаружения, что включено в $PYTHONPATH, выполняет следующий код в Python (3):
import sys
print(sys.path)
Как добавить каталог
Иногда
Из файла Python можно иногда добавлять путь (пути) к пути по умолчанию путем добавления следующих строк в главном разделе приложения Python или сценария:
import sys
sys.path.insert(0, "/path/to/your/package_or_module")
Например:
если у меня есть папка: /home/myname/pythonfiles
, и я хочу импортировать файл module_1.py
, расположенный в том каталоге, я добавляю это к главному разделу моего кода:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
И я могу просто импортировать файл module_1.py
:
import module_1
Когда я создаю пакет и хочу импортировать модуль (модули) из пакета, я должен создать папку в $PYTHONPATH
, содержа модули, сопровождаемые (может быть пустым), названный файл __init__.py
Например:
Импортировать из пакета названная (папка) my_package
в /home/myname/pythonfiles
, добавьте /home/myname/pythonfiles
соедините каналом к Вашему $PYTHONPATH
, как в примере 1, и импорт названный модуль module_2.py
(в папке пакета) просто с:'
from <packagename> import module_2
Добавление каталогов к $PYTHONPATH
постоянно:
Добавьте следующую строку к Вашему ~/.profile
файл.
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
Подкаталоги
Из пакета подкаталоги не включены точно так же, как это; необходимо "объединить каталоги в цепочку". Импортировать модуль module_3.py
, в папке subfolder
в папке packagename
:
import packagename.subfolder.module_3
Учитывая тот факт, что все подпапки в пакете включают свое собственное __init__.py
файл.
Когда модуль находится в том же каталоге как сценарий или приложение
Нет никакой потребности вставить путь к модулю, когда это находится в том же каталоге как сценарий или приложение, он автоматически добавляется.
Пример:
Если у меня есть папка, содержа script.py
и module.py
, Я могу просто импортировать модуль:
import module
Корректный способ использовать относительный импорт:
from ..Common import foo1
И Вам также нужно __init__.py
во всех Ваших папках.
NB: Этот ответ устарел для последней версии python 3, но здесь для более ранней версии. Для получения дополнительной информации читайте комментарии и https://www.python.org/dev/peps/pep-0420 /
<час>По существу каждый папка с кодом Python, который Вы хотите добавить к потребностям syspath __ init __. файл py. Они __ init __. файлы py могут быть пустыми.