Как установить PYTHONPATH в скрипте Python?

115

Я знаю, как установить его в моем / etc / profile и в переменных окружения.

Но что, если я захочу установить его во время сценария? Это import os, sys? Как мне это сделать?

TIMEX
источник

Ответы:

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 __ ()? Это должно очистить путь Python. Надеюсь это поможет.
Thayz 03
@ francisco-manuel-garca-botella На этом сайте очень приветствуются ответы на старые вопросы! Не о чем сожалеть.
user7610
Я не согласен с тем, что это питонический язык, и я бы предположил, что это не очень хороший подход к программированию. Когда происходит исключение, обработка исключений обходится очень дорого, поэтому вы не хотите использовать ее для замены оператора «if», где вполне возможно, что вы будете использовать else. Простой if mypath в sys.path ... else ... был бы моим советом.
markgalassi
6

PYTHONPATH попадает в sys.path , который вы можете изменить во время выполнения.

import sys
sys.path += ["whatever"]
unbeli
источник
Есть ли причина предпочесть этот ответ ответу @DavidZ?
Dror
По крайней мере, он менее подробный.
Tripleee
-1

вы можете установить PYTHONPATH, os.environ['PATHPYTHON']=/some/pathзатем вам нужно вызвать os.system('python')перезапуск оболочки Python, чтобы новый добавленный путь стал эффективным.

tesla1060
источник
1
os.system()не «перезапускает оболочку Python», а запускает новый интерактивный экземпляр Python. Когда вы вернетесь из этого, вы снова окажетесь в вызывающем сценарии.
Tripleee
-2

Я Linux это тоже работает:

import sys
sys.path.extend(["/path/to/dotpy/file/"])
lashgar
источник