#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. Итак, каков наилучший способ импортировать папку / код, чтобы я мог использовать все файлы в нем, независимо от указания имени вложенной папки и пути?