How to get the PYTHONPATH in shell?

228,188

Solution 1

The environment variable PYTHONPATH is actually only added to the list of locations Python searches for modules. You can print out the full list in the terminal like this:

python -c "import sys; print(sys.path)"

Or if want the output in the UNIX directory list style (separated by :) you can do this:

python -c "import sys; print(':'.join(x for x in sys.path if x))"

Which will output something like this:

/usr/local/lib/python2.7/dist-packages/feedparser-5.1.3-py2.7.egg:/usr/local/lib/
python2.7/dist-packages/stripogram-1.5-py2.7.egg:/home/qiime/lib:/home/debian:/us
r/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib
/python2.7/lib-old:/usr/lib/python2.7/lib- dynload:/usr/local/lib/python2.7/dist-
packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/u
sr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:
/usr/lib/pymodules/python2.7

Solution 2

Just write:

just write which python in your terminal and you will see the python path you are using.

Solution 3

Those of us using Python 3.x should do this:

python -c "import sys; print(sys.path)"

Solution 4

Python, at startup, loads a bunch of values into sys.path (which is "implemented" via a list of strings), including:

  • various hardcoded places
  • the value of $PYTHONPATH
  • probably some stuff from startup files (I'm not sure if Python has rcfiles)

$PYTHONPATH is only one part of the eventual value of sys.path.

If you're after the value of sys.path, the best way would be to ask Python (thanks @Codemonkey):

python -c "import sys; print sys.path"

Solution 5

You can also try this:

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

Python 3.x:
python3 -c "import sys; print('\n'.join(sys.path))"

The output will be more readable and clean, like so:

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload /Library/Python/2.7/site-packages /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC

Share:
228,188
showkey
Author by

showkey

Working at high school.

Updated on July 05, 2022

Comments

  • showkey
    showkey almost 2 years
    debian@debian:~$ echo $PYTHONPATH  
    /home/qiime/lib/:  
    debian@debian:~$ python  
    Python 2.7.3 (default, Jan  2 2013, 16:53:07)   
    [GCC 4.7.2] on linux2  
    Type "help", "copyright", "credits" or "license" for more information.  
    >>> import sys  
    >>> sys.path  
    ['', '/usr/local/lib/python2.7/dist-packages/feedparser-5.1.3-py2.7.egg',   
    '/usr/local/lib/python2.7/dist-packages/stripogram-1.5-py2.7.egg', '/home/qiime/lib', 
    '/home/debian', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2',   
    '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-
    dynload',   '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', 
    '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10',  
    '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7']    
    

    How can I get all of PYTHONPATH output in bash?
    Why echo $PYTHONPATH can not get all of them?

  • abalter
    abalter almost 8 years
    That's the path to the python executable NOT the PYTHONPATH. PYTHONPATH is where python itself looks for modules to import.
  • variable
    variable over 4 years
    Is sys path same as PYTHONPATH?
  • Hubro
    Hubro over 4 years
    @variable No, the paths in PYTHONPATH is added to the paths in sys.path when the Python interpreter starts. In other words, sys.path will include all the paths in PYTHONPATH, but also additional paths, like the path to the Python standard library and the path to installed packages.
  • variable
    variable over 4 years
    OK, Please can you advise how I can get the value of PYTHONPATH?
  • Hubro
    Hubro over 4 years
    @variable In bash echo $PYTHONPATH, in Python 3 import os; print(os.environ["PYTHONPATH"])
  • variable
    variable over 4 years
    This gives me syntax error (pointing to end of import word - EOL while scanning string literal): python -c 'import os; print(os.environ["PYTHONPATH"])'. If I use double quote then it says "name 'PYTHONPATH' is not defined"
  • Hubro
    Hubro over 4 years
    @variable This works for me (Python 3): PYTHONPATH=test python -c 'import os; print(os.environ["PYTHONPATH"])'. If you're still having problems I'm in the Python 3 chat room. Let's not pollute the comment section here :)
  • qurban
    qurban over 4 years
    The path where Python itself exists is called PYTHON_HOME or PYTHONHOME
  • Pauli
    Pauli over 4 years
    Please notice that there is a typo in the second line of code. It should read 'python', not 'python3'.
  • Goblinhack
    Goblinhack over 4 years
    slight mod to the original: PYTHONPATH=$(python -c "import os, sys; print(os.pathsep.join(x for x in sys.path if x))")
  • Technophile
    Technophile over 2 years
    @Pauli not a typo. One (old) convention is to install Python 2.7 as "python" and Python 3.x as "python3".