Qual é a diferença entre dist-packages e site-packages?


243

Estou um pouco irritado com o processo de instalação do pacote python. Especificamente, qual é a diferença entre os pacotes instalados no diretório dist-packages e no diretório site-packages?

Respostas:


226

dist-packages é uma convenção específica do Debian que também está presente em seus derivados, como o Ubuntu. Os módulos são instalados nos dist-packages quando eles vêm do gerenciador de pacotes Debian para este local:

/usr/lib/python2.7/dist-packages

Desde easy_installe pipsão instalados a partir do gerenciador de pacotes, eles também usam dist-packages, mas colocam pacotes aqui:

/usr/local/lib/python2.7/dist-packages

No Wiki do Debian Python :

dist-packages em vez de site-packages. O software Python de terceiros instalado nos pacotes Debian entra em dist-packages, não em site-packages. Isso é para reduzir o conflito entre o Python do sistema e qualquer compilação Python de origem que você possa instalar manualmente.

Isso significa que, se você instalar manualmente o Python a partir da fonte, ele usará o diretório site-packages. Isso permite que você mantenha as duas instalações separadas, especialmente porque o Debian e o Ubuntu dependem da versão do sistema do Python para muitos utilitários do sistema.


22
Isso é preciso ?! Eu instalo com o pip e ele vai para dist-packages. (em Deb Squeeze + Py 2.6)
Basel Shishani 04/04

4
É o mesmo para mim também. Os pacotes instalados com o pip ou o easy_install todos vão para dist-packages.
monostop

1
Mesmo aqui, eu teria algum problema se remover todas essas instalações?
Mohamed Turki

1
Mesmos diretórios para o Debian 6.0.10 (ainda no Python 2.6).
ᴠɪɴᴄᴇɴᴛ

2
Se você usar virtualenv com pip, o pip instalará pacotes no diretório site-packages .
Diabloneo

4

dist-packagesé o diretório específico do debian onde os aptamigos instalam seus itens e site-packagesé o pipdiretório padrão .

O problema é - o que acontece quando diferentes versões do mesmo pacote estão presentes em diretórios diferentes?

Minha solução para o problema é fazer dist-packagesum link simbólico para 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
  popd
done

(se você não estiver usando ferramentas gnu, remova a -vopção).


1
Estou um pouco confuso que problema você resolve com sua solução já que a questão requiers uma explicação
Jürgen K.

@ JürgenK .: o problema para mim era qual pacote é usado quando existem versões diferentes em diretórios diferentes.
sds 07/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.