8

The docs for sys.path state the following:

A list of strings that specifies the search path for modules. Initialized from the environment variable PYTHONPATH, plus an installation-dependent default.

So my understanding here is that PYTHONPATH is an environment variable. Environment variables can be printed out in Powershell using the following command:

PS> echo $ENV:VARIABLENAME

However when I do $ENV:PYTHONPATH I get no output. If I try to access PYTHONPATH from a python terminal, I get a KeyError:

>>> import os
>>> os.environ["PYTHONPATH"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python310\lib\os.py", line 679, in __getitem__
    raise KeyError(key) from None
KeyError: 'PYTHONPATH'

However, I know PYTHONPATH is defined somewhere, because its value does appear when I use sys.path:

>>> import sys
>>> sys.path
['', 'C:\\Python310\\python310.zip', 'C:\\Python310\\DLLs', 'C:\\Python310\\lib', 'C:\\Python310', 'C:\\Users\\aa\\AppData\\Roaming\\Python\\Python310\\site-packages', 'C:\\Python310\\lib\\site-packages', 'C:\\Python310\\lib\\site-packages\\scons-4.4.0-py3.10.egg', 'C:\\Python310\\lib\\site-packages\\colorama-0.3.2-py3.10.egg', 'C:\\Python310\\lib\\site-packages\\win32', 'C:\\Python310\\lib\\site-packages\\win32\\lib', 'C:\\Python310\\lib\\site-packages\\Pythonwin']

If PYTHONPATH is truly an environment variable, why can't I access it using either Powershell or os in my Python interpreter?

4
  • 4
    No, Python simply supplies a default value if PYTHONPATH is unset. The documentation you quoted does explain this. Commented May 6, 2023 at 10:15
  • 1
    @tripleee What typically sets PYTHONPATH? Commented May 6, 2023 at 10:21
  • 1
    By default there is nothing in PYTHONPATH. If you set something as value for PYTHONPATH, then this something is added to sys.path and Python will look for imports in these directories. Commented May 6, 2023 at 10:22
  • Ok, thanks, if one of you guys can formulate that into a full answer I will accept it. Commented May 6, 2023 at 10:22

1 Answer 1

14

The variable PYTHONPATH is an environment variable which you can set to add additional directories where python will look for modules and packages. This variable is not set by default and not needed for Python to work because it it already knows where to find its standard libraries (sys.path).

But if for any reason you need some custom Python libraries that you do not want to install, you can export PYTHONPATH=/path/to/my/modules/ to add /path/to/my/modules/ to the paths that Python will explore, then it will know where to find those custom modules.

And this time, if you print again sys.path, it will display you the newly added modules.

Sign up to request clarification or add additional context in comments.

1 Comment

ned to be clear: python will be checked first $PWD/modules when importing, so the modules part means to look only in there for modules and packages to import beside built-in sys.path.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.