What's the difference between dist-packages and site-packages? What's the difference between dist-packages and site-packages? python python

What's the difference between dist-packages and site-packages?

dist-packages is a Debian-specific convention that is also present in its derivatives, like Ubuntu. Modules are installed to dist-packages when they come from the Debian package manager into this location:


Since easy_install and pip are installed from the package manager, they also use dist-packages, but they put packages here:


From the Debian Python Wiki:

dist-packages instead of site-packages. Third party Python softwareinstalled from Debian packages goes into dist-packages, notsite-packages. This is to reduce conflict between the system Python,and any from-source Python build you might install manually.

This means that if you manually install Python from source, it uses the site-packages directory. This allows you to keep the two installations separate, especially since Debian and Ubuntu rely on the system version of Python for many system utilities.

dist-packages is the debian-specific directory where apt and friends install their stuff, and site-packages is the standard pip directory.

The problem is -- what happens when different versions of the same package are present in different directories?

My solution to the problem is to make dist-packages a symlink to site-packages:

for d in $(find $WORKON_HOME -type d -name dist-packages); do  pushd $d  cd ..  if test -d dist-packages/__pycache__; then    mv -v dist-packages/__pycache__/* site-packages/__pycache__/    rmdir -v dist-packages/__pycache__  fi  mv -v dist-packages/* site-packages/  rmdir -v dist-packages  ln -sv site-packages dist-packages  popddone

(if you are not using gnu tools, remove the -v option).