ไดเร็กทอรีไซต์แพ็คเกจของ python คืออะไร


119

ไดเร็กทอรีsite-packagesถูกกล่าวถึงในบทความที่เกี่ยวข้องกับ Python ต่างๆ มันคืออะไร? วิธีการใช้งาน?

คำตอบ:


72

site-packagesเป็นไดเร็กทอรีเป้าหมายของแพ็คเกจ Python ที่สร้างขึ้นเอง เมื่อคุณสร้างและติดตั้งแพคเกจ Python จากซอร์ส (โดยใช้distutilsอาจโดยการดำเนินการpython setup.py install) คุณจะพบโมดูลที่ติดตั้งsite-packagesตามค่าเริ่มต้น

มีสถานที่มาตรฐาน:

  • Unix (บริสุทธิ์) 1 :prefix/lib/pythonX.Y/site-packages
  • Unix (ไม่บริสุทธิ์): exec-prefix/lib/pythonX.Y/site-packages
  • Windows: prefix\Lib\site-packages

1 Pureหมายความว่าโมดูลใช้รหัส Python เท่านั้น Non-pureสามารถมีรหัส C / C ++ ได้เช่นกัน

site-packagesเป็นส่วนเริ่มต้นของเส้นทางการค้นหา Python ดังนั้นโมดูลที่ติดตั้งจึงสามารถนำเข้าได้อย่างง่ายดายในภายหลัง


การอ่านที่เป็นประโยชน์


10
ตำแหน่งเกิดขึ้น/usr/local/lib/python3.6/site-packagesบน Ubuntu
mehmet

ฉันเคยเห็นระบบ Gentoo มาแล้วlib64!
MultipleMonomials

2
conda หรือ pip ติดตั้งลงในแพ็คเกจไซต์หรือเพียงแค่สร้างแพ็คเกจด้วยตนเอง?
Monica Heddneck

2
คำถามที่น่าสนใจจริงๆคือทำไมต้องเป็นไดเรกทอรีนี้ ทำไมไม่ติดตั้งไปที่/usr/lib/python3.6?
Torsten Bronger

40

เมื่อคุณใช้--userตัวเลือกกับ pipแพ็คเกจจะถูกติดตั้งในโฟลเดอร์ของผู้ใช้แทนที่จะเป็นโฟลเดอร์ส่วนกลางและคุณไม่จำเป็นต้องเรียกใช้คำสั่ง pip ด้วยสิทธิ์ของผู้ดูแลระบบ

ตำแหน่งของโฟลเดอร์แพ็คเกจของผู้ใช้สามารถพบได้โดยใช้:

python -m site --user-site

สิ่งนี้จะพิมพ์สิ่งที่ต้องการ:

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

เมื่อคุณไม่ได้ใช้--userตัวเลือกกับ pipแพ็คเกจจะถูกติดตั้งในโฟลเดอร์ส่วนกลางที่กำหนดโดย:

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

สิ่งนี้จะพิมพ์สิ่งที่ต้องการ:

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

หมายเหตุ: ค่าที่พิมพ์ด้านบนใช้สำหรับ Windows 10 ที่ติดตั้ง Anaconda 4.x โดยมีค่าเริ่มต้น


24

ไซต์แพ็คเกจเป็นเพียงตำแหน่งที่ Python ติดตั้งโมดูล

ไม่จำเป็นต้อง "พบว่ามัน" หลามรู้ที่จะหามันด้วยตัวเองสถานที่แห่งนี้คือมักจะเป็นส่วนหนึ่งของ PYTHONPATH นี้ (sys.path)

โดยทางโปรแกรมคุณสามารถค้นหาได้ด้วยวิธีนี้:

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'


3
อาจจะง่ายกว่าในการนำเข้าไซต์แล้ว site.getsitepackages ()
JSharm

1
ไม่ได้ทั้งหมดกระจายงูหลามมีและนี้จะเพิ่มsite-packages StopIterationตัวอย่างเช่น Debian (และ Ubuntu) ต้องdist-packagesติดตั้งโมดูลแบบกระจาย
Mike T

หากคุณใช้ Virtualenv และไม่สืบทอดแพ็คเกจส่วนกลางสิ่งนี้จะใช้ได้เสมอ ฉันไม่เคยเขียนโค้ดโดยไม่มีคุณธรรม
Anthony Perot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.