додавання каталогу в 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 Клавен

16
@RClaven, вибачте, важко сказати, які дії та результати ти маєш на увазі: "поклади це на вершину" та "зламав моє джанго" не дуже точні. Чи можете ви докладно?
Нед Дейлі

Більш детальну інформацію про те , як sys.path робіт дивіться цей відповідь stackoverflow.com/a/38403654/850326
djhaskin987

2
Ви дійсно повинні використовувати "1" замість "0"! Інакше ви зламаєте sys.path . Дивіться також stackoverflow.com/q/10095037/125507 .
kadee


6

Як на мене, мені потрібно зайнятися кафею до мого шляху пітона. Я можу додати це шлях до файлу /home/xy/.bashrcшляхом додавання

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

до мого /home/xy/.bashrcфайлу.

Але коли я використовую pycharm, шлях все ще не входить.

Тож я можу додати шлях до PYTHONPATHзмінної, запустивши -> редагувати конфігурацію.

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


Найпростіша найкраща відповідь, додайте, що це для розвитку зробить роботу автозаповнення
Gang

Я оновив .bashrc, як було пояснено вище, але не відображено у зошиті з юпітера. Jupyter notebook все ще говорить, що модуль не знайдено.
Атар


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.