Is `PYTHONPATH` really an environment variable?
Asked Answered
F

1

5

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?

Firn answered 6/5, 2023 at 10:9 Comment(4)
No, Python simply supplies a default value if PYTHONPATH is unset. The documentation you quoted does explain this.Rentier
@Rentier What typically sets PYTHONPATH?Firn
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.Matri
Ok, thanks, if one of you guys can formulate that into a full answer I will accept it.Firn
N
12

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/ on Python will then know where to find those custom modules.

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

Nichani answered 6/5, 2023 at 10:24 Comment(1)
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.Sow

© 2022 - 2025 — McMap. All rights reserved.