Как мне узнать мой путь к Python, используя Python?

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

10 ответов

Решение

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 для поиска импортированных модулей вместе с другими стандартными файлами. и сторонние каталоги библиотек, перечисленные в "sys.path" Python.

Как и любые другие переменные окружения, вы можете экспортировать их либо в оболочку, либо в ~/.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.

Работает в Windows 10, по сути идентично ответу Вануана, но чище (взято откуда-то, не могу вспомнить где..):

import sys
for p in sys.path:
    print(p)
      import subprocess
python_path = subprocess.check_output("which python", shell=True).strip()
python_path = python_path.decode('utf-8')

Python сообщает мне, где он живет, когда выдает сообщение об ошибке:)

>>> import os
>>> os.environ['PYTHONPATH'].split(os.pathsep)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\martin\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'PYTHONPATH'
>>>

Если вы используете conda, вы можете получить префикс env, используя os.environ["CONDA_PREFIX"].

import sys
for a in sys.path:
    a.replace('\\\\','\\')
    print(a)

Это даст все пути, готовые к размещению в Windows.

Используйте команду,

      $ which python

не забудьте ввести это в правильной среде, поэтому используйте:

      $ conda activate <env>

или же

      $ mamba activate <env>

Если у вас нет среды conda, $ which pythonили же $ which python3было бы очень хорошо.

Другие вопросы по тегам