Hoe kom ik achter mijn PYTHONPATH met Python?

Hoe kom ik erachter welke mappen worden vermeld in de PYTHONPATH-variabele van mijn systeem, vanuit een Python-script (of de interactieve shell)?


Antwoord 1, autoriteit 100%

sys.path kan items bevatten die niet specifiek in uw omgevingsvariabele PYTHONPATH staan. Gebruik om de variabele rechtstreeks op te vragen:

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

Antwoord 2, autoriteit 92%

Dit wil je waarschijnlijk ook:

import sys
print(sys.path)

Of als oneliner vanaf de terminal:

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

Voorbehoud: als je meerdere versies van Python hebt geïnstalleerd, moet je een overeenkomstige opdracht python2 of python3 gebruiken.


Antwoord 3, autoriteit 4%

Kan het andere antwoord niet bewerken. Heeft een kleine fout in die zin dat het alleen voor Windows is. De meer algemene oplossing is om os.sep te gebruiken zoals hieronder:

sys.path kan items bevatten die niet specifiek in uw PYTHONPATH-omgevingsvariabele staan. Gebruik om de variabele rechtstreeks op te vragen:

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

Antwoord 4, autoriteit 2%

PYTHONPATH is een omgevingsvariabele waarvan de waarde een lijst met mappen is. Eenmaal ingesteld, wordt het door Python gebruikt om te zoeken naar geïmporteerde modules, samen met andere std. en bibliotheekmappen van derden die worden vermeld in Python’s “sys.path”.

Zoals alle andere omgevingsvariabelen, kunt u deze ofwel in shell of in ~/.bashrc exporteren, zie hier.
Je kunt os.environ[‘PYTHONPATH’] opvragen voor zijn waarde in Python, zoals hieronder getoond:

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

ALS gedefinieerd in shell als

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

DAN resultaat =>

/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 resultaat =>

PYTHONPATH is not defined

Om PYTHONPATH op meerdere paden in te stellen, zie hier.

Merk op dat men een zoekpad kan toevoegen of verwijderen via sys.path.insert(), del of remove() tijdens runtime, maar NIET via os.environ[].
Voorbeeld:

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

Samengevat is PYTHONPATH een manier om het Python-zoekpad(en) voor geïmporteerde modules in sys.path op te geven. U kunt lijstbewerkingen ook rechtstreeks toepassen op sys.path zonder de hulp van PYTHONPATH.


Antwoord 5

Werkt in Windows 10, in wezen identiek aan het antwoord van Vanuan, maar schoner (ergens vandaan gehaald, weet niet meer waar..):

import sys
for p in sys.path:
    print(p)

Antwoord 6

Python vertelt me ​​waar het woont wanneer het me een foutmelding geeft 🙂

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

Antwoord 7

import subprocess
python_path = subprocess.check_output("which python", shell=True).strip()
python_path = python_path.decode('utf-8')

Antwoord 8

Als u conda gebruikt, kunt u het env-voorvoegsel verkrijgen met os.environ["CONDA_PREFIX"].


Antwoord 9

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

Het geeft alle paden klaar voor plaatsing in Windows.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

5 × two =

Other episodes