Jaka jest różnica między pakietami dist a pakietami site?

243

Trochę mnie przeraża proces instalacji pakietu python. Jaka jest różnica między pakietami zainstalowanymi w katalogu dist-packages a katalogiem site-packages?

maks
źródło

Odpowiedzi:

226

dist-Package to specyficzna dla Debiana konwencja, która występuje również w jej pochodnych, takich jak Ubuntu. Moduły są instalowane w pakietach dystrybucyjnych, gdy pochodzą z menedżera pakietów Debiana w tej lokalizacji:

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

Ponieważ easy_installi pipsą instalowane z menedżera pakietów, używają również pakietów dist, ale umieszczają pakiety tutaj:

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

Z Debian Python Wiki :

pakiety dist zamiast pakietów site. Zewnętrzne oprogramowanie Python instalowane z pakietów Debiana przechodzi na pakiety dist, a nie pakiety site. Ma to na celu zmniejszenie konfliktu między systemowym Pythonem a dowolną kompilacją Pythona ze źródła, którą można zainstalować ręcznie.

Oznacza to, że jeśli ręcznie zainstalujesz Python ze źródła, użyje on katalogu pakietów witryny. Pozwala to zachować osobne instalacje, zwłaszcza że Debian i Ubuntu polegają na systemowej wersji Pythona dla wielu narzędzi systemowych.

jterrace
źródło
22
Czy to jest dokładne ?! Instaluję za pomocą pip i przechodzi do pakietów dist. (na Deb Squeeze + Py 2.6)
Basel Shishani,
4
Dla mnie to samo. Pakiety instalowane za pomocą pip lub easy_install wszystkie trafiają do pakietów dist.
monostop
1
To samo, czy miałbym jakieś problemy, jeśli usunę wszystkie te instalacje?
Mohamed Turki
1
Te same katalogi dla Debiana 6.0.10 (wciąż w Pythonie 2.6).
ᴠɪɴᴄᴇɴᴛ
2
Jeśli używasz virtualenv z pipem, pip zainstaluje pakiety w katalogu site-packages .
diabloneo,
4

dist-packagesjest katalogiem specyficznym dla Debiana, w którym aptznajomi instalują swoje rzeczy, i site-packagesjest standardempip katalogiem .

Problem w tym, co się dzieje, gdy różne wersje tego samego pakietu są obecne w różnych katalogach?

Moim rozwiązaniem tego problemu jest utworzenie dist-packagesdowiązania symbolicznego do 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

(jeśli nie korzystasz z narzędzi GNU, usuń -vopcję).

sds
źródło
1
Jestem trochę zdezorientowany, który problem rozwiązujesz ze swoim rozwiązaniem, ponieważ pytanie wymaga wyjaśnienia
Jürgen K.,
@ JürgenK .: dla mnie problemem było to, który pakiet jest używany, gdy istnieją różne wersje w różnych katalogach.
sds