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 และมีการตั้งค่าในความจริงapplocalpyvenv.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 และตรวจสอบเส้นทางที่เพิ่มใหม่สำหรับไฟล์คอนฟิกูเรชัน