Как использовать PYTHONPATH для импорта всей папки в Python

#python #import #pythonpath

#python #импорт #pythonpath

Вопрос:

Я новичок в python и пытаюсь добавить папку проекта в PYTHONPATH. Я создал файл .pth и добавил свой корневой путь к файлу в папке «Пакеты сайта». Однако, когда я пытаюсь импортировать файлы .py в эту папку, могут быть импортированы только те, которые расположены в корневой папке (например, «/sample»), но эти вложенные папки в папке /sample импортировать не удалось (например, /sample/01). Итак, мой вопрос в том, какой файл и как его изменить, чтобы сделать всю мою папку, включая все ее вложенные папки, доступной для импорта.

В худшем случае, о котором я могу подумать, это записать все имена папок в файле .pth в site-packages. Но я просто считаю, что Python предоставит более эффективный способ достижения этой цели.

Комментарии:

1. Если я правильно вас понимаю, вы бы хотели sample/a.py , sample/x/b.py , и sample/y/z/c.py быть импортируемым как import a,b,c ?

Ответ №1:

У меня никогда не было возможности использовать файл .pth. Я предпочитаю двусторонний подход:

  • Используйте shebang, который запускает env python, поэтому он использует первый python на вашем пути, т. е.:

#!/usr/bin/env python

  • Используйте virtualenv для хранения отдельных различных сред и группирования необходимых библиотек для любой заданной программы / набора программ. Это имеет дополнительное преимущество, заключающееся в том, что файл требований (из вывода pip freeze) можно сохранить в системе управления версиями, а среду можно легко воссоздать в любом месте, например, для использования с тестами Дженкинса и др.

В случае virtualenv интерпретатор python может быть явно вызван из каталога bin virtualenv.

В этом случае для локальных модулей можно использовать локальный сервер PyPI для централизации пользовательских модулей, и они также могут быть включены в файл требований (через параметр —extra-index в pip).

Редактировать с ответом на комментарий от OP:

Я раньше не использовал SublimeREPL, однако, основываясь на описанном вами сценарии, я думаю, что в целом самым простым подходом может быть простая символическая ссылка на каталоги в вашем каталоге site-packages (или dist-packages, в зависимости от обстоятельств).

Это не идеальный сценарий для производственного сервера, но для ваших целей, в клиентском окне, я думаю, это было бы хорошо. Если вы не хотите использовать имя папки, то import ch1/foo есть вам нужно будет создать символическую ссылку внутри этих каталогов, чтобы вы могли просто import foo . Если вы согласны с использованием имени каталога import ch1/foo , то вам нужно будет только символически связать каталог кода верхнего уровня.

Комментарии:

1. Спасибо за ваши инструкции, Кен, но мне довольно сложно понять на данный момент. Я думаю, я должен дать больше информации: я использую SublimeText3 с REPL. Я уже настроил SublimeREPL на использование желаемого интерпретатора python / home /myname /anaconda /bin / python. Я изучаю учебник по созданию систем машинного обучения с помощью Python. Исходный код размещается в соответствии с главами в отдельных папках: ch01, ch02 и т.д. Все они находятся в одной основной папке / code. Итак, каков наилучший способ импортировать папку / код, чтобы я мог использовать все файлы в нем, независимо от указания имени вложенной папки и пути?