Разверните путь поиска Python к другому источнику

Я только что присоединился к проекту с довольно большой существующей кодовой базой. Мы разрабатываем в Linux и не используем и IDE. Мы пробегаем командную строку. Я пытаюсь выяснить, как заставить Python искать правильный путь, когда я выполняю модули проекта. Например, когда я выполняю что-то как:

python someprojectfile.py

Я добираюсь

ImportError: no module named core.'somemodule'

Я получаю это для всего моего импорта в, я предполагаю, что это - проблема с путем.

TLDR:

Как я заставляю Python искать ~/codez/project/ и все файлы и папки для *.py файлов во время операторов импорта.

87
задан BoJack Horseman 9 October 2014 в 07:06
поделиться

2 ответа

Есть несколько возможных способов сделать это:

  • Задайте для переменной среды PYTHONPATH список каталогов, разделенных двоеточиями, для поиска импортированных модулей.
  • В вашей программе используйте sys.path.append ('/ path / to / search') , чтобы добавить имена каталогов, в которых Python будет искать импортированные модули. sys.path - это просто список каталогов, в которых Python ищет каждый раз, когда его просят импортировать модуль, и вы можете изменить его по мере необходимости (хотя я бы не рекомендовал удалять какие-либо из стандартных каталогов!). Любые каталоги, которые вы помещаете в переменную среды PYTHONPATH , будут вставлены в sys.path при запуске Python.
  • Используйте site.addsitedir , чтобы добавить каталог в sys.path . Разница между этим и простым добавлением заключается в том, что при использовании additedir он также ищет файлы .pth в этом каталоге и использует их для возможного добавления дополнительных каталогов в sys. .path в зависимости от содержимого файлов. См. Документацию для более подробной информации.

Какой из них вы хотите использовать, зависит от вашей ситуации. Помните, что когда вы распространяете свой проект среди других пользователей, они обычно устанавливают его таким образом, что файлы кода Python будут автоматически обнаруживаться импортером Python (т. Е. Пакеты обычно устанавливаются в каталог site-packages ). , поэтому если вы запутаетесь с sys.путь в вашем коде, который может быть ненужным и может даже иметь неблагоприятные последствия при запуске этого кода на другом компьютере. Для разработки я бы рискнул предположить, что установка PYTHONPATH обычно является лучшим способом.

Однако, когда вы используете что-то, что просто работает на вашем собственном компьютере (или когда у вас нестандартные настройки, например, иногда в рамках веб-приложений), не так уж редко можно сделать что-то вроде

import sys
from os.path import dirname
sys.path.append(dirname(__file__))
154
ответ дан 24 November 2019 в 07:47
поделиться

Вы также должны прочитать о пакетах Python здесь: http://docs.python.org/tutorial/modules.html .

Из вашего примера я могу предположить, что у вас действительно есть пакет по адресу ~ / codez / project . Файл __ init __. Py в каталоге python отображает каталог в пространство имен. Если все ваши подкаталоги имеют файл __ init __. Py , вам нужно только добавить базовый каталог в ваш PYTHONPATH . Например:

PYTHONPATH = $ PYTHONPATH: $ HOME / adaifotis / project

Помимо тестирования переменной среды PYTHONPATH, как объясняет Дэвид, вы можете протестировать ее на python следующим образом:

$ python
>>> import project                      # should work if PYTHONPATH set
>>> import sys
>>> for line in sys.path: print line    # print current python path

...

11
ответ дан 24 November 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: