sys.path
งูหลามจริงๆพยายามอย่างหนักที่จะตั้งอย่างชาญฉลาด วิธีการที่จะมีการตั้งค่าจะได้รับจริงๆ ซับซ้อน แนะนำต่อไปนี้คือการรดน้ำลงค่อนข้าง-สมบูรณ์ค่อนข้างผิด แต่หวังว่ามีประโยชน์คู่มือสำหรับยศและไฟล์โปรแกรมเมอร์หลามของสิ่งที่เกิดขึ้นเมื่อตัวเลขหลามออกว่าจะใช้เป็นค่าเริ่มต้นของsys.path
,
sys.executable
, sys.exec_prefix
และsys.prefix
ในการ
ติดตั้งหลามปกติ
อันดับแรก python ทำระดับได้ดีที่สุดในการหาตำแหน่งทางกายภาพที่แท้จริงบนระบบไฟล์ตามสิ่งที่ระบบปฏิบัติการบอก หากระบบปฏิบัติการแจ้งว่า "python" กำลังทำงานอยู่ระบบจะพบว่าตัวเองอยู่ใน $ PATH มันแก้ไขลิงก์สัญลักษณ์ใด ๆ เมื่อดำเนินการเสร็จแล้วเส้นทางของไฟล์ปฏิบัติการที่พบจะถูกใช้เป็นค่าสำหรับsys.executable
ไม่มี ifs และหรือ buts
ถัดไปก็จะเป็นตัวกำหนดค่าเริ่มต้นสำหรับการและsys.exec_prefix
sys.prefix
หากมีไฟล์ที่เรียกpyvenv.cfg
ในไดเร็กทอรีเดียวกัน
sys.executable
หรือขึ้นมาหนึ่งไดเร็กทอรี python จะดูที่ไฟล์นั้น ระบบปฏิบัติการที่แตกต่างกันทำสิ่งต่างๆกับไฟล์นี้
หนึ่งในค่านิยมในไฟล์ config home = <DIRECTORY>
ที่หลามมองหาตัวเลือกการกำหนดค่า Python จะใช้ไดเร็กทอรีนี้แทนไดเร็กทอรีที่มีsys.executable
เมื่อตั้งค่าเริ่มต้นแบบไดนามิกในsys.prefix
ภายหลัง หากการapplocal = true
ตั้งค่าปรากฏใน
pyvenv.cfg
ไฟล์บน Windows แต่ไม่ใช่การhome = <DIRECTORY>
ตั้งค่าระบบsys.prefix
จะตั้งค่าเป็นไดเร็กทอรีที่มีsys.executable
.
จากPYTHONHOME
นั้นตรวจสอบตัวแปรสภาพแวดล้อม บน Linux และ Mac
sys.prefix
และsys.exec_prefix
ตั้งค่าเป็นPYTHONHOME
ตัวแปรสภาพแวดล้อมหากมีอยู่จะแทนที่home = <DIRECTORY>
การตั้งค่าใด ๆในpyvenv.cfg
. บน Windows
sys.prefix
และsys.exec_prefix
ถูกตั้งค่าเป็นPYTHONHOME
ตัวแปรสภาพแวดล้อมหากมีอยู่เว้นแต่จะมีhome = <DIRECTORY>
การตั้งค่าอยู่pyvenv.cfg
ซึ่งจะใช้แทน
มิฉะนั้นเหล่านี้sys.prefix
และsys.exec_prefix
จะพบได้โดยการย้อนกลับเดินจากสถานที่ตั้งของsys.executable
หรือhome
ไดเรกทอรีที่กำหนดโดยpyvenv.cfg
ถ้ามี
หากlib/python<version>/dyn-load
พบไฟล์ในไดเร็กทอรีนั้นหรือไดเร็กทอรีพาเรนต์ไดเร็กทอรีนั้นจะถูกกำหนดให้เป็น
sys.exec_prefix
บน Linux หรือ Mac หากพบไฟล์
lib/python<version>/os.py
ในไดเร็กทอรีหรือไดเร็กทอรีย่อยใด ๆ ไดเร็กทอรีนั้นจะถูกกำหนดให้อยู่sys.prefix
บน Linux, Mac และ Windows โดยsys.exec_prefix
ตั้งค่าเป็นค่าเดียว
sys.prefix
กับบน Windows ขั้นตอนทั้งหมดนี้จะข้ามไปใน Windows หาก
applocal = true
ตั้งค่าไว้ ไดเร็กทอรีของsys.executable
ถูกใช้หรือถ้าhome
ถูกตั้งค่าไว้pyvenv.cfg
ซึ่งจะใช้แทนค่าเริ่มต้นของsys.prefix
.
หากไม่พบไฟล์ "จุดสังเกต" เหล่านี้หรือsys.prefix
ยังไม่พบ python sys.prefix
จะตั้งค่าเป็น "ทางเลือก" Linux และ Mac, ตัวอย่างเช่นการใช้ค่าเริ่มต้นก่อนรวบรวมเป็นค่าของและsys.prefix
sys.exec_prefix
หน้าต่างรอจนกว่าจะคิดออกอย่างเต็มที่ในการตั้งค่าทางเลือกสำหรับsys.path
sys.prefix
จากนั้น (สิ่งที่คุณได้รับการรอคอย) sys.path
หลามกำหนดค่าเริ่มต้นที่จะมีอยู่ใน
sys.path
ไดเรกทอรีของสคริปต์ซึ่งหลามกำลังดำเนินการจะถูกเพิ่ม ใน Windows จะเป็นสตริงว่างเสมอซึ่งจะบอกให้ python ใช้เส้นทางแบบเต็มที่สคริปต์ตั้งอยู่แทน
- เนื้อหาของตัวแปรสภาพแวดล้อม PYTHONPATH ถ้าชุดจะถูกเพิ่ม
sys.path
, เว้นแต่คุณจะอยู่บน Windows และมีการตั้งค่าในความจริงapplocal
pyvenv.cfg
- เส้นทางไฟล์ zip ซึ่งอยู่
<prefix>/lib/python35.zip
บน Linux / Mac และ
os.path.join(os.dirname(sys.executable), "python.zip")
บน Windows จะถูกเพิ่มลงในsys.path
ไฟล์.
- หากใน Windows และไม่
applocal = true
ได้ตั้งค่าไว้ระบบpyvenv.cfg
จะเพิ่มเนื้อหาของคีย์ย่อยของคีย์รีจิสทรี
HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
หากมี
- หากใน Windows และไม่
applocal = true
ได้ตั้งค่าไว้pyvenv.cfg
และsys.prefix
ไม่พบเนื้อหาหลักของคีย์รีจิสทรีHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
จะถูกเพิ่มเข้าไปหากมีอยู่
- หากใน Windows และไม่
applocal = true
ได้ตั้งค่าไว้ระบบpyvenv.cfg
จะเพิ่มเนื้อหาของคีย์ย่อยของคีย์รีจิสทรี
HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\
หากมี
- หากใน Windows และไม่
applocal = true
ได้ตั้งค่าไว้pyvenv.cfg
และsys.prefix
ไม่พบเนื้อหาหลักของคีย์รีจิสทรีHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
จะถูกเพิ่มเข้าไปหากมีอยู่
- หากบน Windows และไม่ได้ตั้งค่า PYTHONPATH จะไม่พบคำนำหน้าและไม่มีคีย์รีจิสทรีปรากฏอยู่ดังนั้นค่าเวลาคอมไพล์สัมพัทธ์ของ PYTHONPATH จะถูกเพิ่มเข้าไป มิฉะนั้นขั้นตอนนี้จะถูกละเว้น
- เส้นทางในแมโคร PYTHONPATH
sys.prefix
รวบรวมเวลาที่มีการเพิ่มเทียบกับแบบไดนามิกพบ
- บน Mac และ Linux ค่าของ
sys.exec_prefix
จะถูกเพิ่ม บน Windows, ไดเรกทอรีที่ใช้ (หรือจะได้รับใช้) เพื่อค้นหาแบบไดนามิกสำหรับsys.prefix
ถูกเพิ่ม
ในขั้นตอนนี้บน Windows หากไม่พบคำนำหน้า python จะพยายามกำหนดโดยค้นหาไดเรกทอรีทั้งหมดในsys.path
ไฟล์จุดสังเกตตามที่พยายามทำกับไดเรกทอรีsys.executable
ก่อนหน้านี้จนกว่าจะพบบางสิ่ง ถ้าไม่มีให้sys.prefix
เว้นว่างไว้
สุดท้ายหลังจากทั้งหมดนี้ Python จะโหลดsite
โมดูลซึ่งจะเพิ่มสิ่งต่างๆไปยังsys.path
:
เริ่มต้นด้วยการสร้างไดเร็กทอรีสูงสุดสี่ไดเร็กทอรีจากส่วนหัวและส่วนท้าย สำหรับส่วนหัวจะใช้sys.prefix
และsys.exec_prefix
; หัวว่างถูกข้ามไป สำหรับส่วนหางจะใช้สตริงว่างจากนั้นlib/site-packages
(บน Windows) หรือlib/pythonX.Y/site-packages
จากนั้นlib/site-python
(บน Unix และ Macintosh) สำหรับชุดค่าผสม head-tail ที่แตกต่างกันแต่ละชุดจะตรวจสอบว่าอ้างถึงไดเร็กทอรีที่มีอยู่หรือไม่และหากเป็นเช่นนั้นให้เพิ่มลงใน sys.path และตรวจสอบเส้นทางที่เพิ่มใหม่สำหรับไฟล์คอนฟิกูเรชัน