добавление каталога в sys.path / PYTHONPATH


130

Я пытаюсь импортировать модуль из определенного каталога.

Проблема в том, что если я sys.path.append(mod_directory)добавляю путь, а затем открываю интерпретатор python, каталог mod_directoryдобавляется в конец списка sys.path. Если я экспортирую PYTHONPATHпеременную перед открытием интерпретатора python, каталог добавляется в начало списка. В последнем случае я могу импортировать модуль, а в первом - нет.

Может ли кто-нибудь объяснить, почему это происходит, и дать мне решение добавить mod_directoryв начало внутри скрипта Python?


Ответы:


178

Это работает, как указано в документации. Любые пути, указанные в PYTHONPATH, документируются как обычно следующие после рабочего каталога, но перед стандартными путями, предоставляемыми интерпретатором. sys.path.append()добавляется к существующему пути. Смотрите здесь и здесь . Если вы хотите, чтобы конкретный каталог был первым, просто вставьте его в начало sys.path:

import sys
sys.path.insert(0,'/path/to/mod_directory')

Тем не менее, обычно есть более эффективные способы управления импортом, чем использование PYTHONPATHили манипулирование sys.pathнапрямую. См., Например, ответы на этот вопрос .


Спасибо за ответ. Проблема заключалась в том, что я не понимал, что для добавления модуля, упакованного в виде файла .egg, вы должны включить имя файла, а не только каталог в python 2.6
UnadulteratedImagination

2
Эй, чувак, это сломало мой джанго. Вы уверены, что хотите сказать людям, чтобы они поместили его наверху?!? !!?
R Claven

16
@RClaven, извините, сложно сказать, какое действие и результаты вы имеете в виду: «поставить вверху» и «сломал мой django» не очень точны. Вы можете уточнить?
Нед Дейли,

Подробнее о том, как работает sys.path, см. В этом ответе stackoverflow.com/a/38403654/850326
djhaskin987

2
Вам действительно стоит использовать «1» вместо «0»! В противном случае вы нарушите sys.path . См. Также stackoverflow.com/q/10095037/125507 .
kadee


6

Что касается меня, мне нужно подключиться к моему пути Python. Я могу добавить его путь к файлу /home/xy/.bashrc, добавив

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH,

в мой /home/xy/.bashrcфайл.

Но когда я использую pycharm, путь все еще не указан.

Итак, я могу добавить путь к PYTHONPATHпеременной, выполнив -> редактировать конфигурацию.

введите описание изображения здесь


Самый простой - лучший ответ, добавьте это для разработки, чтобы автозаполнение работало
Gang

Я обновил .bashrc, как описано выше, но не отразил в блокноте jupyter. Ноутбук Jupyter по-прежнему сообщает, что модуль не найден.
Атар

3

Временное изменение директорий хорошо подходит для импорта:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

При запуске скрипта Python из Powershell под Windows это должно работать:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.