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_prefix
ve sys.prefix
bir ü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.executable
ifs, ands veya buts yok , değer olarak kullanılır .
Daha sonra, başlangıç değerlerini tespit eder sys.exec_prefix
ve
sys.prefix
.
pyvenv.cfg
Aynı dizinde
sys.executable
veya 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.prefix
daha sonrasının ilk değerini dinamik olarak ayarladığında içeren dizin yerine bu dizini kullanacaktır . Eğer applocal = true
ayar görünen
pyvenv.cfg
Windows üzerinde dosyaya değil, home = <DIRECTORY>
ayar, daha sonra sys.prefix
içeren dizine kurulacaktır sys.executable
.
Ardından PYTHONHOME
ortam değişkeni incelenir. Linux ve Mac'te
sys.prefix
ve varsa ortam değişkenine sys.exec_prefix
ayarlı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 .PYTHONHOME
home = <DIRECTORY>
pyvenv.cfg
sys.prefix
sys.exec_prefix
PYTHONHOME
home = <DIRECTORY>
pyvenv.cfg
Aksi halde, bu sys.prefix
ve sys.exec_prefix
yerini yürüme geriye doğru tarafından bulunur sys.executable
, ya home
tarafından verilen dizinde pyvenv.cfg
varsa.
Dosya lib/python<version>/dyn-load
bu dizinde veya üst dizinlerinden herhangi birinde bulunursa, bu dizin sys.exec_prefix
Linux veya Mac'te olacak şekilde ayarlanır
. Dosya
lib/python<version>/os.py
dizinde veya alt dizinlerinden herhangi birinde bulunursa, bu dizin sys.prefix
Linux, Mac ve Windows'ta Windows'dakiyle sys.exec_prefix
aynı değere ayarlanacak şekilde ayarlanır
sys.prefix
. Ayarlandıysa tüm bu adım Windows'ta atlanır
applocal = true
. Ya dizini sys.executable
kullanılır ya da eğer home
ayarlanmışsa pyvenv.cfg
, onun başlangıç değeri yerine kullanılır sys.prefix
.
Bu "dönüm noktası" dosyalarını bulamazsa veya sys.prefix
henüz bulunamazsa, python sys.prefix
bir "geri dönüş" değerine ayarlanır . Linux ve Mac, örneğin, kullanım değerleri olarak varsayılan-derlenmiş ön sys.prefix
ve 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 applocal
gerçek in olarak ayarlanır pyvenv.cfg
.
<prefix>/lib/python35.zip
Linux / 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 = true
ayar 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 = true
ayar yapılmamışsa pyvenv.cfg
ve sys.prefix
bulunamı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 = true
ayar 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 = true
ayar yapılmamışsa pyvenv.cfg
ve sys.prefix
bulunamı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_prefix
eklenir. Windows'ta, dinamik olarak arama yapmak için kullanılan (veya kullanılacak olan) dizin sys.prefix
eklenir.
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.path
sys.executable
sys.prefix
Son olarak, tüm site
bunlardan 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.prefix
ve 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.