Вопрос

Как мне узнать, какие каталоги перечислены в моей системе PYTHONPATH переменная, из скрипта Python (или интерактивной оболочки)?

Это было полезно?

Решение

sys.path может включать элементы, которых нет конкретно в вашем PYTHONPATH переменная среды.Чтобы запросить переменную напрямую, используйте:

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []

Другие советы

Вы, вероятно, тоже хотели бы этого:

import sys
print(sys.path)

Или в виде одного лайнера с терминала:

python -c "import sys; print('\n'.join(sys.path))"

Кажется, не могу отредактировать другой ответ.Имеет незначительную ошибку в том, что он доступен только для Windows.Более общим решением является использование os.sep, как показано ниже:

sys.path может включать элементы, которых нет конкретно в вашей переменной окружения PYTHONPATH.Чтобы запросить переменную напрямую, используйте:

import os
os.environ['PYTHONPATH'].split(os.pathsep)

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

Как и любые другие переменные среды, вы можете экспортировать их либо в shell, либо в ~/.bashrc, см. здесь.Вы можете запросить os.environ['PYTHONPATH'] для его значения в Python, как показано ниже:

$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"

ЕСЛИ определено в оболочке как

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite

ЗАТЕМ результат =>

/home/Documents/DjangoTutorial/mysite
['', '/home/Documents/DjangoTutorial/mysite', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

ДРУГОЙ результат =>

PYTHONPATH is not defined

Чтобы задать PYTHONPATH для нескольких путей, см. здесь.

Обратите внимание, что можно добавить или удалить путь поиска через sys.path.insert(), del или remove() во время выполнения, но НЕ через os.environ[].Пример:

>>> os.environ['PYTHONPATH']="$HOME/Documents/DjangoTutorial/mysite"
>>> 'PYTHONPATH' in sorted(os.environ)
True
>>> sys.path // but Not there
['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

>>> sys.path.insert(0,os.environ['PYTHONPATH'])
>>> sys.path // It's there
['$HOME/Documents/DjangoTutorial/mysite', '', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
>>> 

Таким образом, PYTHONPATH - это один из способов указать пути поиска Python для импортированных модулей в sys.path.Вы также можете применять операции со списком непосредственно к sys.path без помощи PYTHONPATH.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top