python – What exactly should be set in PYTHONPATH?

python – What exactly should be set in PYTHONPATH?

You dont have to set either of them. PYTHONPATH can be set to point to additional directories with private libraries in them. If PYTHONHOME is not set, Python defaults to using the directory where python.exe was found, so that dir should be in PATH.

For most installations, you should not set these variables since they are not needed for Python to run. Python knows where to find its standard library.

The only reason to set PYTHONPATH is to maintain directories of custom Python libraries that you do not want to install in the global default location (i.e., the site-packages directory).

Make sure to read:

python – What exactly should be set in PYTHONPATH?

Here is what I learned: PYTHONPATH is a directory to add to the Python import search path sys.path, which is made up of current dir. CWD, PYTHONPATH, standard and shared library, and customer library. For example:

% python3 -c import sys;print(sys.path)
/usr/lib/python3.6, /usr/lib/python3.6/lib-dynload, 
/usr/local/lib/python3.6/dist-packages, /usr/lib/python3/dist-packages]

where the first path denotes the current dir., the 2nd path is via

%export PYTHONPATH=/home/username/Documents/DjangoTutorial/mySite 

which can be added to ~/.bashrc to make it permanent, and the rest are Python standard and dynamic shared library plus third-party library such as django.

As said not to mess with PYTHONHOME, even setting it to or None will cause python3 shell to stop working:

% export PYTHONHOME=
% python3
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named encodings

Current thread 0x00007f18a44ff740 (most recent call first):
Aborted (core dumped)

Note that if you start a Python script, the CWD will be the scripts directory.
For example:

[email protected]:~/Documents/DjangoTutorial% python3 mySite/ runserver
==== Printing sys.path ====
/home/username/Documents/DjangoTutorial/mySite # CWD is where resides

You can also append a path to sys.path at run-time:
Suppose you have a file in ~/Documents/Python directory:

[email protected]:~/Documents/DjangoTutorial% python3 
>>> sys.path.append(/home/username/Documents)
>>> print(sys.path)
[, /usr/lib/python3.6, /usr/lib/python3.6/lib-dynload, 
/usr/local/lib/python3.6/dist-packages, /usr/lib/python3/dist-packages, 
>>> from Python import Fibonacci as fibo

or via

% PYTHONPATH=/home/username/Documents:$PYTHONPATH
% python3
>>> print(sys.path)
/home/username/Documents, /home/username/Documents/DjangoTutorial/mySite, 
/usr/lib/python3.6, /usr/lib/python3.6/lib-dynload, 
/usr/local/lib/python3.6/dist-packages, /usr/lib/python3/dist-packages]
>>> from Python import Fibonacci as fibo

Leave a Reply

Your email address will not be published. Required fields are marked *