Jak mogę znaleźć ścieżkę Pythona za pomocą Pythona?

Jak mogę dowiedzieć się, które katalogi są wymienione w zmiennej PYTHONPATH mojego systemu, z poziomu skryptu Pythona (lub interaktywnej powłoki)?

Author: Vanuan, 2009-09-28

9 answers

sys.path może zawierać elementy, które nie znajdują się w zmiennej środowiskowej PYTHONPATH. Aby bezpośrednio odpytywać zmienną, użyj:

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []
 250
Author: Mark Ransom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-08 00:41:43

Pewnie też byś tego chciał:

import sys
print(sys.path)

Lub jako jedna linijka z terminala:

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

Caveat : Jeśli masz zainstalowanych kilka wersji Pythona, powinieneś użyć odpowiedniego polecenia python2 lub python3.

 643
Author: Vanuan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-10 22:07:36

Nie mogę edytować drugiej odpowiedzi. Ma niewielki błąd w tym, że jest tylko Windows. Bardziej ogólnym rozwiązaniem jest użycie systemu operacyjnego.sep jak poniżej:

Sys.path może zawierać elementy, które nie są konkretnie w zmiennej środowiskowej PYTHONPATH. Aby bezpośrednio odpytywać zmienną, użyj:

import os
os.environ['PYTHONPATH'].split(os.pathsep)
 11
Author: Vitali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-13 21:06:34

PYTHONPATH jest zmienną środowiskową, której wartością jest lista katalogów. Po ustawieniu jest używany przez Pythona do wyszukiwania zaimportowanych modułów, wraz z innymi std. i katalogów bibliotek stron trzecich wymienionych w Pythonie " sys.ścieżka".

Jak każda inna zmienna środowiskowa, możesz ją wyeksportować w powłoce lub w~/.bashrc, patrz tutaj . Możesz odpytywać system operacyjny.environ ['PYTHONPATH'] dla jego wartości w Pythonie, jak pokazano poniżej:

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

Jeśli zdefiniowano w powłoce jako

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

Wtedy result = >

/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']

ELSE result = >

PYTHONPATH is not defined

Aby ustawić PYTHONPATH na wiele ścieżek, zobacz tutaj .

Zauważ, że można dodać lub usunąć ścieżkę wyszukiwania za pomocą sys./ align = "left" / insert (), del lub remove () w czasie wykonywania, ale nie przez system operacyjny.environ[]. Przykład:

>>> 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']
>>> 

Podsumowując, PYTHONPATH jest jednym ze sposobów określania ścieżek wyszukiwania Pythona dla importowanych modułów w sys./ align = "left" / Możesz również zastosować operacje listy bezpośrednio do sys.ścieżka bez pomocy PYTHONPATH.

 4
Author: Leon Chang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-09 07:59:18

Działa w windows 10, zasadniczo identyczny z odpowiedzią vanuana, ale czystszy (zaczerpnięty skądś ,nie pamiętam gdzie..):

import sys
for p in sys.path:
    print(p)
 4
Author: juggler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-16 04:29:15

Python mówi mi, gdzie mieszka, gdy wyświetla komunikat o błędzie:)

>>> 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'
>>>
 2
Author: C4rnot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-21 14:03:45

Jeśli używasz conda, możesz uzyskać prefiks env używając os.environ["CONDA_PREFIX"].

 0
Author: Sandro Braun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-07 11:08:07
import sys
for a in sys.path:
    a.replace('\\\\','\\')
    print(a)

Da wszystkie ścieżki gotowe do umieszczenia w oknach.

 0
Author: Diogo Hutner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-21 15:34:09
import subprocess
python_path = subprocess.check_output("which python", shell=True).strip()
python_path = python_path.decode('utf-8')
 0
Author: Rakend Dubba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-18 08:55:58