What is python's site-packages directory?

Python

Python Problem Overview


The directory site-packages is mentioned in various Python related articles. What is it? How to use it?

Python Solutions


Solution 1 - Python

site-packages is the target directory of manually built Python packages. When you build and install Python packages from source (using distutils, probably by executing python setup.py install), you will find the installed modules in site-packages by default.

There are standard locations:

  • Unix (pure)1: prefix/lib/pythonX.Y/site-packages
  • Unix (non-pure): exec-prefix/lib/pythonX.Y/site-packages
  • Windows: prefix\Lib\site-packages

1 Pure means that the module uses only Python code. Non-pure can contain C/C++ code as well.

site-packages is by default part of the Python search path, so modules installed there can be imported easily afterwards.


Useful reading

Solution 2 - Python

When you use --user option with pip, the package gets installed in user's folder instead of global folder and you won't need to run pip command with admin privileges.

The location of user's packages folder can be found using:

python -m site --user-site

This will print something like:

C:\Users\%USERNAME%\AppData\Roaming\Python\Python35\site-packages

When you don't use --user option with pip, the package gets installed in global folder given by:

python -c "import site; print(site.getsitepackages())"

This will print something like:

['C:\\Program Files\\Anaconda3', 'C:\\Program Files\\Anaconda3\\lib\\site-packages'

Note: Above printed values are for On Windows 10 with Anaconda 4.x installed with defaults.

Solution 3 - Python

site-packages is just the location where Python installs its modules.

No need to "find it", python knows where to find it by itself, this location is always part of the PYTHONPATH (sys.path).

Programmatically you can find it this way:

import sys
site_packages = next(p for p in sys.path if 'site-packages' in p)
print site_packages

'/Users/foo/.envs/env1/lib/python2.7/site-packages'

Solution 4 - Python

On my CentOS7.9 Linux (a RedHat clone) it is found in ~/.local/lib/python3.9/site-packages/ and there is no need to include it in the PYTHONPATH variable.

Solution 5 - Python

According to here:

> A Python installation has a site-packages directory inside the module > directory. This directory is where user installed packages are > dropped.

Though it doesn't explain why the word site is chosen, it explains what this directory is meant for.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOmer DaganView Question on Stackoverflow
Solution 1 - PythonOmer DaganView Answer on Stackoverflow
Solution 2 - PythonShital ShahView Answer on Stackoverflow
Solution 3 - PythonDevLoungeView Answer on Stackoverflow
Solution 4 - PythonkarstenView Answer on Stackoverflow
Solution 5 - PythonsmwikipediaView Answer on Stackoverflow