Apa itu direktori paket situs python?

119

Direktori site-packagestersebut disebutkan dalam berbagai artikel terkait Python. Apa itu? Bagaimana cara menggunakannya?

Omer Dagan
sumber

Jawaban:

72

site-packagesadalah direktori target paket Python yang dibuat secara manual. Saat Anda membangun dan menginstal paket Python dari sumber (menggunakan distutils , mungkin dengan mengeksekusi python setup.py install), Anda akan menemukan modul yang diinstal site-packagessecara default.

Ada lokasi standar:

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

1 Pure artinya modul hanya menggunakan kode Python. Tidak murni dapat berisi kode C / C ++.

site-packagessecara default merupakan bagian dari jalur pencarian Python , sehingga modul yang diinstal di sana dapat diimpor dengan mudah setelahnya.


Bacaan yang berguna

Omer Dagan
sumber
10
lokasi kebetulan berada /usr/local/lib/python3.6/site-packagesdi ubuntu
mehmet
Saya telah melihat sistem Gentoo dengan ini lib64!
MultipleMonomials
2
apakah conda atau pip diinstal ke dalam paket situs, atau hanya paket yang dibuat secara manual?
Monica Heddneck
2
Pertanyaan yang sangat menarik adalah: Mengapa direktori ini? Mengapa tidak menginstal saja /usr/lib/python3.6?
Torsten Bronger
40

Saat Anda menggunakan --useropsi dengan pip , paket akan diinstal di folder pengguna, bukan di folder global, dan Anda tidak perlu menjalankan perintah pip dengan hak istimewa admin.

Lokasi folder paket pengguna dapat ditemukan menggunakan:

python -m site --user-site

Ini akan mencetak sesuatu seperti:

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

Jika Anda tidak menggunakan --useropsi dengan pip , paket akan diinstal di folder global yang diberikan oleh:

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

Ini akan mencetak sesuatu seperti:

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

Catatan: Nilai yang dicetak di atas adalah untuk Di Windows 10 dengan Anaconda 4.x diinstal dengan default.

Shital Shah
sumber
24

paket situs hanyalah lokasi tempat Python menginstal modulnya.

Tidak perlu "menemukannya", python tahu di mana menemukannya dengan sendirinya, lokasi ini selalu menjadi bagian dari PYTHONPATH (sys.path).

Secara terprogram Anda dapat menemukannya dengan cara ini:

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'

Anthony Perot
sumber
3
Mungkin lebih mudah untuk mengimpor situs daripada site.getsitepackages ()
JSharm
1
Tidak semua distribusi Python memilikinya site-packages, dan ini akan meningkat StopIteration. Misalnya, Debian (dan Ubuntu) harus dist-packagesmenginstal modul terdistribusi mereka.
Mike T
Jika Anda menggunakan virtualenv dan tidak mewarisi paket global maka ini akan selalu berfungsi. Saya tidak pernah membuat kode tanpa virtualenv
Anthony Perot