How do I find out which directories are listed in my system’s PYTHONPATH variable, from within a Python script (or the interactive shell)?
10 Answers
You would probably also want this:
import sys
print(sys.path)
Or as a one liner from the terminal:
python -c "import sys; print('\n'.join(sys.path))"
Caveat: If you have multiple versions of Python installed you should use a corresponding command python2 or python3.
10 Comments
'') is in the path: python -c "import sys, pprint; pprint.pprint(sys.path)" ( And I found this answer more helpful, too; the title of the question mislead me into thinking it was about the actual path python was using, rather than the contents of the PYTHONPATH environment variable.)sys.path[0] to get the "deffault" path where a local file ist stored. Oterwise I get an array with lots of paths. e.g fiel=open(MyLogfile.log, 'w')sys.path might include items that aren't specifically in your PYTHONPATH environment variable. To query the variable directly, use:
import os
try:
user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
user_paths = []
9 Comments
sys.path.Can't seem to edit the other answer. Has a minor error in that it is Windows-only. The more generic solution is to use os.pathsep as below:
sys.path might include items that aren't specifically in your PYTHONPATH environment variable. To query the variable directly, use:
import os
os.environ.get('PYTHONPATH', '').split(os.pathsep)
2 Comments
os.sep returns the directory separator for the operating system, e.g. /. The separator used in the Python path is different, and returned by os.pathsep as shown in the accepted answer.PYTHONPATH is an environment variable whose value is a list of directories. Once set, it is used by Python to search for imported modules, along with other std. and 3rd-party library directories listed in Python's "sys.path".
As any other environment variables, you can either export it in shell or in ~/.bashrc, see here. You can query os.environ['PYTHONPATH'] for its value in Python as shown below:
$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"
IF defined in shell as
$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite
THEN 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
To set PYTHONPATH to multiple paths, see here.
Note that one can add or delete a search path via sys.path.insert(), del or remove() at run-time, but NOT through os.environ[]. Example:
>>> 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']
>>>
In summary, PYTHONPATH is one way of specifying the Python search path(s) for imported modules in sys.path. You can also apply list operations directly to sys.path without the aid of PYTHONPATH.
3 Comments
.get(), if PYTHONPATH is not defined, you'll simply get a traceback error and neither the path nor "PYTHONPATH is not defined" are printed. Replace it with print(os.environ.get('PYTHONPATH')); and the output will default to None instead of failing.os.environ['PYTHONPATH'] is a string, in order to print one entry per line, issue for p in os.environ['PYTHONPATH'].split(';'): print(p)else print('PYTHONPATH is not defined')when PYTHONPATH is not defined because it's not defined. Trying to access it directly via square brackets when checking will exit via Traceback instead of printing "PYTHONPATH is not defined". To make this check work properly, you need to change the code block to python3 -c "import os, sys; print(os.environ.get('PYTHONPATH')); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"Works in windows 10, essentially identical to vanuan's answer, but cleaner (taken from somewhere, can't remember where..):
import sys
for p in sys.path:
print(p)
1 Comment
import sys; print('\n'.join(sys.path))import subprocess
python_path = subprocess.check_output("which python", shell=True).strip()
python_path = python_path.decode('utf-8')
1 Comment
PYTHONPATH is not "where Python lives", but an environment variable with additional paths to search for modules.Python tells me where it lives when it gives me an error message :)
>>> 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'
>>>
1 Comment
PYTHONPATH is not "where Python lives", but an environment variable with additional paths to search for modules.import sys
for a in sys.path:
a = a.replace('\\\\','\\')
print(a)
It will give all the paths ready for place in the Windows.
1 Comment
.replace on a string does not modify the string, but instead creates a new one which is ignored in this code. Not that it matters, because there is no good reason to unescape the backslashes anyway. Path strings from sys.path are usable on that system as is.Use the command,
$ which python
remember to enter this in the correct environment so use:
$ conda activate <env>
or
$ mamba activate <env>
If you do not have a conda environment, $ which python or $ which python3 would do just fine.
3 Comments
PYTHONPATH is not "where Python lives", but an environment variable with additional paths to search for modules.
PYTHONPATH. Usesys.pathfor that.sys.pathis "A list of strings that specifies the search path for modules" - docs.python.org/2/library/sys.html#sys.path. PYTHONPATH is an environment variable that effects this list. By any reasonable definitionsys.pathis your "python path".python -m site.python -m site --user-site... If it is called without arguments, it will print the contents ofsys.pathon the standard output..."