Apa perbedaan antara paket-paket dist dan paket situs?

243

Saya agak jengkel dengan proses instalasi paket python. Secara khusus, apa perbedaan antara paket yang diinstal di direktori dist-paket dan direktori paket situs?

maks
sumber

Jawaban:

226

dist-package adalah konvensi khusus Debian yang juga hadir dalam turunannya, seperti Ubuntu. Modul diinstal ke dist-paket ketika mereka datang dari manajer paket Debian ke lokasi ini:

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

Karena easy_installdan pipdiinstal dari manajer paket, mereka juga menggunakan paket-dist, tetapi mereka meletakkan paket di sini:

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

Dari Wiki Debian Python :

paket-dist bukan paket situs. Perangkat lunak Python pihak ketiga yang diinstal dari paket Debian masuk ke paket-dist, bukan paket-situs. Ini untuk mengurangi konflik antara sistem Python, dan setiap bangunan dari sumber Python yang mungkin Anda pasang secara manual.

Ini berarti bahwa jika Anda menginstal Python secara manual dari sumber, ia menggunakan direktori paket situs. Ini memungkinkan Anda untuk memisahkan kedua instalasi, terutama karena Debian dan Ubuntu mengandalkan versi sistem Python untuk banyak utilitas sistem.

jterrace
sumber
22
Apakah ini akurat ?! Saya menginstal dengan pip dan pergi ke dist-paket. (di Deb Squeeze + Py 2.6)
Basel Shishani
4
Itu sama bagi saya juga. Paket yang terinstal dengan pip atau easy_install semua masuk ke paket-dist.
monostop
1
Sama di sini, apakah saya akan memiliki masalah jika saya menghapus semua instalasi itu?
Mohamed Turki
1
Direktori yang sama untuk Debian 6.0.10 (masih menggunakan Python 2.6).
ᴠɪɴᴄᴇɴᴛ
2
Jika Anda menggunakan virtualenv dengan pip, pip akan menginstal paket di direktori paket situs .
diabloneo
4

dist-packagesadalah direktori khusus-debian tempat aptdan teman-teman menginstal barang-barang mereka, dan site-packagesmerupakan pipdirektori standar .

Masalahnya adalah - apa yang terjadi ketika versi berbeda dari paket yang sama hadir di direktori yang berbeda?

Solusi saya untuk masalah ini adalah membuat dist-packagessymlink ke 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

(jika Anda tidak menggunakan alat gnu, hapus -vopsi).

sds
sumber
1
Saya agak bingung masalah mana yang Anda selesaikan dengan solusi Anda karena pertanyaan itu membutuhkan penjelasan
Jürgen K.
@ JürgenK .: masalahnya bagi saya adalah paket mana yang digunakan ketika ada versi berbeda di direktori yang berbeda.
sds