Python gerçekten akıllıca ayarlamak için çok çalışıyor sys.path. Nasıl ayarlandığı gerçekten karmaşıklaşabilir . Aşağıdaki kılavuz piton rakamlar neyi olarak kullanmak için dışarı ne olur rütbesi ve dosya piton programcı için bir sulandırılmış, biraz-tamamlanmamış, biraz-yanlış, ama umarım-kullanışlı bir kılavuzdur başlangıç değerleri arasında sys.path,
sys.executable, sys.exec_prefixve sys.prefixbir üzerinde normal bir
piton yüklemesi.
İlk olarak, python işletim sisteminin söylediklerine bağlı olarak dosya sistemindeki gerçek fiziksel konumunu bulmak için elinden gelenin en iyisini yapar. İşletim sistemi sadece "python" çalıştığını söylüyorsa, kendisini $ PATH içinde bulur. Herhangi bir sembolik bağı çözer. Bunu yaptıktan sonra, bulduğu yürütülebilir dosyanın yolu, sys.executableifs, ands veya buts yok , değer olarak kullanılır .
Daha sonra, başlangıç değerlerini tespit eder sys.exec_prefixve
sys.prefix.
pyvenv.cfgAynı dizinde
sys.executableveya bir dizin üstte çağrılan bir dosya varsa , python ona bakar. Farklı işletim sistemleri bu dosya ile farklı şeyler yapar.
Python'un aradığı bu yapılandırma dosyasındaki değerlerden biri yapılandırma seçeneğidir home = <DIRECTORY>. Python sys.executable
, sys.prefixdaha sonrasının ilk değerini dinamik olarak ayarladığında içeren dizin yerine bu dizini kullanacaktır . Eğer applocal = trueayar görünen
pyvenv.cfgWindows üzerinde dosyaya değil, home = <DIRECTORY>ayar, daha sonra sys.prefixiçeren dizine kurulacaktır sys.executable.
Ardından PYTHONHOMEortam değişkeni incelenir. Linux ve Mac'te
sys.prefixve varsa ortam değişkenine sys.exec_prefixayarlıdır, içindeki herhangi bir ayarın yerini alır . Windows'ta
ve bunun yerine kullanılan bir ayar olmadığı sürece , varsa ortam değişkenine ayarlanır .PYTHONHOMEhome = <DIRECTORY>pyvenv.cfgsys.prefixsys.exec_prefixPYTHONHOMEhome = <DIRECTORY>pyvenv.cfg
Aksi halde, bu sys.prefixve sys.exec_prefixyerini yürüme geriye doğru tarafından bulunur sys.executable, ya hometarafından verilen dizinde pyvenv.cfgvarsa.
Dosya lib/python<version>/dyn-loadbu dizinde veya üst dizinlerinden herhangi birinde bulunursa, bu dizin sys.exec_prefixLinux veya Mac'te olacak şekilde ayarlanır
. Dosya
lib/python<version>/os.pydizinde veya alt dizinlerinden herhangi birinde bulunursa, bu dizin sys.prefixLinux, Mac ve Windows'ta Windows'dakiyle sys.exec_prefixaynı değere ayarlanacak şekilde ayarlanır
sys.prefix. Ayarlandıysa tüm bu adım Windows'ta atlanır
applocal = true. Ya dizini sys.executablekullanılır ya da eğer homeayarlanmışsa pyvenv.cfg, onun başlangıç değeri yerine kullanılır sys.prefix.
Bu "dönüm noktası" dosyalarını bulamazsa veya sys.prefixhenüz bulunamazsa, python sys.prefixbir "geri dönüş" değerine ayarlanır . Linux ve Mac, örneğin, kullanım değerleri olarak varsayılan-derlenmiş ön sys.prefixve sys.exec_prefix. Windows sys.path, için bir geri dönüş değeri ayarlamak için tam olarak
anlaşılana kadar bekler sys.prefix.
Ardından, (hepinizin beklediği) python, içerilecek ilk değerleri belirler sys.path.
- Python'un çalıştırdığı betiğin dizini eklenir
sys.path. Windows'ta bu her zaman boş dizedir ve python'a betiğin bulunduğu yerin tam yolunu kullanmasını söyler.
- PYTHONPATH ortam değişkeninin içeriği setine eğer eklenir
sys.path, sürece Windows üzerinde konum ve applocalgerçek in olarak ayarlanır pyvenv.cfg.
<prefix>/lib/python35.zipLinux / Mac ve
os.path.join(os.dirname(sys.executable), "python.zip")Windows'ta bulunan zip dosyası yolu sys.path.
- Windows'daysa ve hiçbir
applocal = trueayar yapılmamışsa pyvenv.cfg, varsa kayıt defteri anahtarının alt anahtarlarının içeriği
HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\eklenir.
- Windows'ta hiçbir
applocal = trueayar yapılmamışsa pyvenv.cfgve sys.prefixbulunamıyorsa, varsa kayıt defteri anahtarının temel içeriğiHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ eklenir;
- Windows'daysa ve hiçbir
applocal = trueayar yapılmamışsa pyvenv.cfg, varsa kayıt defteri anahtarının alt anahtarlarının içeriği
HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\eklenir.
- Windows'ta hiçbir
applocal = trueayar yapılmamışsa pyvenv.cfgve sys.prefixbulunamıyorsa, varsa kayıt defteri anahtarının temel içeriğiHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ eklenir;
- Windows'ta ve PYTHONPATH ayarlanmamışsa, önek bulunmazsa ve kayıt defteri anahtarı yoksa, PYTHONPATH'ın göreceli derleme zamanı değeri eklenir; aksi takdirde bu adım dikkate alınmaz.
- Derleme zamanı makrosundaki yollar PYTHONPATH dinamik olarak bulunanlara göre eklenir
sys.prefix.
- Mac ve Linux'ta değeri
sys.exec_prefixeklenir. Windows'ta, dinamik olarak arama yapmak için kullanılan (veya kullanılacak olan) dizin sys.prefixeklenir.
Windows'ta bu aşamada, eğer bir önek bulunamazsa, python, bir şey bulana kadar , daha önce dizini ile yapmaya çalıştığı gibi, dönüm noktası dosyaları için tüm dizinleri arayarak belirlemeye çalışacaktır . Aksi takdirde boş bırakılır.sys.pathsys.executablesys.prefix
Son olarak, tüm sitebunlardan sonra Python modülü yükler ve bu da aşağıdakilere daha da fazla şeyler ekler sys.path:
Bir baş ve bir kuyruk bölümünden en fazla dört dizin oluşturarak başlar. Baş kısmı için kullanır sys.prefixve sys.exec_prefix; boş kafalar atlanır. Kuyruk kısmı için, boş dizeyi ve ardından lib/site-packages(Windows'ta) veya lib/pythonX.Y/site-packages
ardından lib/site-python(Unix ve Macintosh'ta) kullanır. Farklı head-tail kombinasyonlarının her biri için, mevcut bir dizine atıfta bulunup bulunmadığını görür ve öyleyse, onu sys.path'e ekler ve ayrıca yapılandırma dosyaları için yeni eklenen yolu inceler.