it-roy-ru.com

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

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

Но что, если я хочу установить его во время сценария? Это импорт ОС, сис? Как мне это сделать?

94
TIMEX

Вы не устанавливаете PYTHONPATH, вы добавляете записи в sys.path . Это список каталогов, в которых нужно искать пакеты Python, так что вы можете просто добавить свои каталоги в этот список.

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

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

Вы также можете добавить каталоги, используя site.addsitedir , и этот метод также будет учитывать файлы .pth, существующие в передаваемых вами каталогах. (Это не относится к каталогам, указанным в PYTHONPATH.)

162
David Z

Вы можете получить и установить переменные окружения с помощью os.environ:

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

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

Но поскольку ваш переводчик уже работает, это не будет иметь никакого эффекта. Вам лучше использовать

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

это массив, в который ваше PYTHONPATH будет преобразовано при запуске интерпретатора.

30
miku

Извините за повторный вопрос, но думаю, что это может кому-то помочь

Если вы поставили 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

Мне жаль, если я раздражал кого-то, кто снова открыл вопрос.

13

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

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

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

0
tesla1060