Як в сценарії Python як встановити PYTHONPATH?


115

Я знаю, як встановити його в моєму / etc / profile та в мінливому середовищі.

Але що робити, якщо я хочу встановити його під час сценарію? Це імпорт os, sys? Як це зробити?

Відповіді:


192

Ви не встановлюєте PYTHONPATH, додаєте записи до sys.path. Це список каталогів, які слід шукати для пакетів Python, тому ви можете просто додати свої каталоги до цього списку.

sys.path.append('/path/to/whatever')

Фактично, sys.pathініціалізується діленням значення PYTHONPATHна символі роздільника шляху ( :на Linux-подібних системах,; в Windows).

Ви також можете додавати каталоги за допомогою site.addsitedirцього методу, а також враховувати .pthфайли, наявні в папках, які ви передаєте. (Це не було б у випадку із каталогами, які ви вказали PYTHONPATH.)


11
Минуло багато років з моменту опублікування цієї відповіді, але я все ж хочу додати, що якщо ви хочете переконатися, що Python перевіряє новий каталог перед усіма іншими при імпорті, ви повинні поставити новий каталог спочатку в список, як в sys.path.insert(0, '/path/to/whatever').
wecsam

39

Ви можете отримати та встановити змінні середовища за допомогою os.environ:

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."

Але оскільки ваш перекладач вже працює, це не матиме ефекту. Вам краще використовувати

import sys
sys.path.append("...")

який масив PYTHONPATHбуде перетворений під час запуску інтерпретатора.


18

Якщо ви поставите sys.path.append('dir/to/path')без перевірки, це вже додано, ви можете створити довгий список у sys.path. Для цього я рекомендую:

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory

2
Приємно. Дуже піфонічний.
PartialOrder

1
Як я можу спорожнити PythonPath? Я не хочу додавати. Я хочу випорожнити його і помістити все, що тільки хочу. Чи є спосіб це зробити?
Schütze

Ви спробували повторно ініціалізувати його, зателефонувавши на sys.path .__ init __ ()? Це має виповнити шлях пітона. Сподіваюся, це допомагає.
Тайз

@ francisco-manuel-garca-botella Відповіді на старі питання дуже вітаються на цьому сайті! Не треба нічого шкодувати.
користувач7610

Я не погоджуюся, що це пітонічно, і я б припустив, що це не гарний підхід до програмування. Коли виняток трапляється, обробка виключень дуже дорога, тому ви не хочете використовувати її для заміни оператора "якщо", коли цілком можливо, що ви будете використовувати інше. Простий, якщо "mypath" в sys.path ... інше ... буде моєю порадою.
markgalassi

6

PYTHONPATH потрапляє на sys.path , який ви можете змінювати під час виконання.

import sys
sys.path += ["whatever"]

Чи є причина віддати перевагу цій відповіді над відповіді від @DavidZ?
Dror

Якщо нічого іншого, це менш багатослівний.
трійчатка

-1

ви можете встановити PYTHONPATH, до os.environ['PATHPYTHON']=/some/path, тоді вам потрібно зателефонувати, os.system('python')щоб перезапустити оболонку python, щоб зробити новий доданий шлях ефективним.


1
os.system()не "перезапускає оболонку python", він запускає новий інтерактивний екземпляр Python. Повернувшись із цього пункту, ви знову в сценарії виклику.
трійчатка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.