Bir yazılımın sizden PATH değişkeninizi değiştirmek için izin istediğine ya da başka bir programın kurulum talimatlarında gizemli bir şekilde "LD_LIBRARY_PATH değişkeninizi doğru şekilde ayarlamanız" gerektiğinin söylendiğine rastlamış olabilirsiniz.
Bir veri bilimci olarak, hesaplama yığınınızla etkileşim kurarken (özellikle de benim gibi onun üzerinde tam denetime sahip değilseniz) başka ortam değişkeni sorunlarıyla da karşılaşabilirsiniz. Bu yazı, bir ortam değişkeninin ne olduğunu ve veri bilimi bağlamında nasıl kullanıldığını anlaşılır kılmayı amaçlıyor.
Ortam Değişkeni Nedir?
Öncelikle, PATH ortam değişkenini ayrıntılı şekilde ele alarak bir ortam değişkeninin ne olduğunu açıklayayım. Buradaki komutları bash terminalinizde çalıştırmanızı öneririm (uygun düzenlemelerle — ne yaptığımı anlamak için metni okuyun!).
Bilgisayar sisteminize, örneğin yerel bilgisayarınızın terminaline ya da SSH üzerinden uzak sunucunuza giriş yaptığınızda, bash yorumlayıcınızın belirli programları nerede arayacağını bilmesi gerekir; örneğin nano (metin düzenleyici), git (sürüm kontrol yazılımı) ya da Python yürütülebiliri. Bunu PATH değişkeni kontrol eder. Yürütülebilir programlarınızın bulunduğu klasörlerin yollarını belirtir.
Tarihsel olarak, nano, which ve top gibi komut satırı programları /usr/bin dizininde bulunur. (Tarihsel olarak, /bin klasörü yazılım ikililerine ayrılmıştır; bu nedenle /bin olarak adlandırılır.) Bunlar işletim sisteminizle birlikte gelen ve bu nedenle yükseltme için özel izin gerektiren programlardır.
Terminalinizde deneyin:
$ which which
/usr/bin/which
$ which top
/usr/bin/top
Diğer bazı programlar (çeşitli nedenlerle) bunun yerine /bin içine kurulur. ls buna bir örnektir:
$ which ls
/bin/ls
Başka programlar ise başka özel dizinlere kurulmuş olabilir:
$ which nano
/usr/local/bin/nano
Bash terminaliniz arayacağı şeyleri nerede bulacağını nasıl anlıyor? PATH ortam değişkenini kullanıyor. Şuna benzer:
$ echo $PATH
/usr/bin:/bin:/usr/local/bin
PATH değişkeniyle ilgili akılda tutulması gereken en önemli şey, "iki nokta ile ayrılmış" olmasıdır. Yani her dizin yolu bir sonrakinden "iki nokta" (:) karakteriyle ayrılır. Bash terminalinizin programları arama sırası soldan sağadır:
/usr/bin/bin/usr/local/bin
Benim bilgisayarımda, ls yazdığımda bash yorumlayıcım önce /usr/bin dizinine bakar. ls'nin /usr/bin içinde olmadığını görür ve bir sonraki dizin olan /bin'e geçer. ls /bin altında bulunduğu için, ls programını oradan çalıştırır.
Görüldüğü gibi, bu durum hesaplama ortamınızı özelleştirmek için son derece esnektir; ancak bir program PATH değişkeninizi sizin bilginiz olmadan değiştirdiyse bir o kadar da can sıkıcı olabilir.
Bir dakika, PATH değişkenini gerçekten değiştirebilir misiniz? Evet, ve bunu yapmanın birkaç yolu var.
PATH değişkeni Nasıl Değiştirilir
Bir Bash Oturumu Kullanarak
İlk yol geçici olup yalnızca içinde bulunduğunuz bash oturumu için geçerlidir. Bir klasöre mevcut yollardan daha yüksek öncelik vermek için onu PATH değişkeninin başına "ekleyebilirsiniz":
$ export PATH=/path/to/my/folder:$PATH
$ echo $PATH
/path/to/my/folder:/usr/bin:/bin:/usr/local/bin
Ya da mevcut yollardan daha düşük öncelik vermek için PATH değişkeninin sonuna "ekleyebilirsiniz":
$ export PATH=$PATH:/path/to/my/folder
$ echo $PATH
/usr/bin:/bin:/usr/local/bin:/path/to/my/folder
Bunun geçici olma nedeni, yalnızca mevcut bash oturumum sırasında export etmemdir.
bashrc veya .bash_profile Dosyası
Değişikliklerimi biraz daha kalıcı yapmak istersem, bunları .bashrc veya .bash_profile dosyamın içine eklerim. (Ben .bashrc dosyasını kullanmayı öneririm.) .bashrc/.bash_profile dosyası ana dizininizde bulunur ($HOME ortam değişkeniniz bunu belirtir) ve bash yorumlayıcınız ilk yüklemede bu dosyayı çalıştırır. İçindeki tüm komutları yürütür. Bu da şu anlama gelir: .bashrc dosyanıza şunları yazarak PATH değişkeninizi değiştirebilirsiniz:
...other stuff above...
# Make /path/to/folder have higher priority
export PATH=/path/to/folder:$PATH
# Make /path/to/other/folder have lower priority
export PATH=$PATH:/path/to/folder
...other stuff below...
Veri Bilimi ve PATH ortam değişkeni
Peki, bu durum veri bilimciler için neden önemlidir? Eğer veri bilimciyseniz, büyük olasılıkla Python kullanıyorsunuzdur ve Python yorumlayıcınız Anaconda Python dağıtımından geliyordur (cidden harika bir şey, mutlaka edinin!). Anaconda Python yükleyicisinin yaptığı şey, PATH ortam değişkeninde /path/to/anaconda/bin klasörüne öncelik vermektir. Sisteminizde başka Python yorumlayıcıları kurulu olabilir (örneğin, Apple kendi sürümünü gönderir). Ancak bu PATH değişikliği, Bash terminalinize her python yazdığınızda, Anaconda Python dağıtımıyla gelen Python yorumlayıcısının çalıştırılmasını sağlar. Benim durumumda, Anaconda Python dağıtımını kurduktan sonra PATH'im şöyle görünüyor:
$ echo $PATH
/Users/ericmjl/anaconda/bin:/usr/bin:/bin:/usr/local/bin
Dahası, conda ortamları, ortam etkinleştirildiğinde conda ortamının ikili dosyalar klasörünün yolunu başa ekler. Örneğin, blogum için lektor adlı bir ortam kullanıyorum. Dolayısıyla...
$ echo $PATH
/Users/ericmjl/anaconda/bin:/usr/bin:/bin:/usr/local/bin
$ which python
/Users/ericmjl/anaconda/bin/python
$ source activate lektor
$ echo $PATH
/Users/ericmjl/anaconda/envs/lektor/bin:/Users/ericmjl/anaconda/bin:/usr/bin:/bin:/usr/local/bin
$ which python
/Users/ericmjl/anaconda/envs/lektor/bin/python
Artık bash terminalinin, daha yüksek öncelikli lektor ortamının içindeki Python'u öncelikli olarak seçtiğine dikkat edin.
Buraya kadar geldiyseniz, burada listelenen birkaç önemli kavramı fark etmiş olmalısınız. Hızlıca özetleyelim:
PATH, bash yorumlayıcısının yürütülebilir programları nerede bulacağını anlamak için kullandığı düz metin bir ortam değişkenidir.PATHiki nokta ile ayrılır; daha yüksek öncelikli dizinler dizgenin solunda, daha düşük öncelikliler sağında yer alır.PATH, ortam değişkenine dizinler başa eklenerek ya da sona eklenerek değiştirilebilir. Bu işlem bir bash oturumu içinde komut satırındaexportkomutunu çalıştırarak geçici olarak yapılabilir ya da.bashrcveya.bash_profiledosyanıza birexportsatırı ekleyerek oturumlar arasında kalıcı hale getirilebilir.
İlginizi Çekebilecek Diğer Ortam Değişkenleri
Peki, bir veri bilimci başka hangi ortam değişkenleriyle karşılaşabilir? Özellikle sistem yöneticileriniz tatildeyse (ya da yanıt vermeleri çok uzun sürüyorsa) görebileceğiniz ve düzeltmeniz gerekebilecek bazı örnekler şunlardır.
Genel kullanım için, HOME klasörünüzün nerede olduğunu bilmek isteyeceksiniz — Linux sistemlerinde genellikle /home/username, macOS sistemlerinde ise genellikle /Users/username olur. HOME'un ne olduğunu şu şekilde bulabilirsiniz:
$ echo $HOME
/Users/ericmjl
Eğer bir Python kullanıcısıysanız, PYTHONPATH faydalı olabilecek bir değişkendir. Python yorumlayıcısı tarafından kullanılır ve Python modül/paketlerinin nerede bulunacağını belirtir.
C++ kütüphaneleriyle uğraşmanız gerekiyorsa, LD_LIBRARY_PATH ortam değişkeninizi bilmek çok önemli olacaktır. Bu konuda yeterince yetkin değilim; en iyi uygulamalar hakkında daha fazla bilgi için bu web sitesine başvurmanızı öneririm.
Spark ile çalışıyorsanız, PYSPARK_PYTHON ortam değişkeni ilginizi çekecektir. Bu, Spark'a hem sürücü hem de işçiler için hangi Python'un kullanılacağını söyler; gerekirse PYSPARK_DRIVER_PYTHON'ı PYSPARK_PYTHON ortam değişkeninden ayrı olacak şekilde de ayarlayabilirsiniz.
Ortam Değişkenlerinizi Hackleyin
En eğlenceli kısım burada! Ortam değişkenlerinizi hackleyerek yapabileceğiniz bazı şeyler için beni takip edin.
Hack #1: PyPy erişimini etkinleştirin. Zaman zaman PyPy’nin gelişimini takip ediyorum; ancak PyPy henüz varsayılan Python yorumlayıcısı değil ve henüz conda install ile kurulabilir değil. Bu yüzden onu kendi $HOME/pypy/bin dizinine koyuyorum. PyPy yorumlayıcısına erişimi etkinleştirmek için, /path/to/pypy yolumun PATH ortam değişkeninde bulunduğundan, fakat normal CPython yorumlayıcımdan daha düşük öncelikte olduğundan emin olmam gerekiyor.
Hack #2: Diğer dil yorumlayıcılarına/derleyicilerine erişimi etkinleştirin. Bu durum PyPy ile benzerdir. Bir dönem derin öğrenme için Torch kullanmak üzere Lua'nın JIT yorumlayıcısını deniyordum ve .bashrc'me oraya giden bir yol eklemem gerekiyordu.
Hack #3: Python paketlerini ana dizininize kurun. conda ortamları yerine modules sistemi kullanan paylaşımlı Linux hesaplama sistemlerinde, yüklediğiniz bir modulefile, değiştirme iznine sahip olmadığınız bir sanal ortamla yapılandırılmış olabilir. Bir Python paketi kurmanız gerekiyorsa, pip install --user my_pkg_name komutunu kullanmak isteyebilirsiniz. Bu, paketi $HOME/.local/lib/python-[version]/site-packages/ yoluna kuracaktır. Bu durumda, PYTHONPATH'inizin $HOME/.local/lib/python-[version]/site-packages dizinini yeterince yüksek bir öncelikle içerdiğinden emin olmak önemlidir.
Hack 4: Bir şeyler ters gittiğinde hata ayıklama. Bir hata oluşursa ya da beklenmeyen bir davranış görürseniz — benim daha önce başıma gelen, tüm Linux modüllerimi yükledikten sonra Python yorumlayıcımın doğru bulunmamasıydı — o zaman bir hata ayıklama yolu olarak PATH ortam değişkeninizi geçici olarak makul bir "varsayılana" ayarlayıp bunu source ederek PATH değişkeninizi etkili bir şekilde "sıfırlayabilir", ardından hata ayıklarken elle başa/sona ekleme yapabilirsiniz.
Bunu yapmak için, ana dizininizde .path_default adlı bir dosyanın içine aşağıdaki satırları yerleştirin:
export PATH="" # resets PATH to an empty string.
export PATH=/usr/bin:/bin:/usr/local/bin:$PATH # this is a sensible default; customize as needed.
Bir şeyler ters gittikten sonra, "source" komutunu kullanarak PATH ortam değişkeninizi sıfırlayabilirsiniz:
$ echo $PATH
/some/complicated/path:/more/complicated/paths:/really/complicated/paths
$ source ~/.path_default
$ echo $PATH
/usr/bin:/bin:/usr/local/bin
Not - Aynı komutları bash oturumunuz içinde doğrudan da çalıştırabilirsiniz; etkileşimli olması da yardımcı olabilir.
Sonuç
Umarım bu yazıyı beğenmişsinizdir ve bu ortam değişkenleriyle karşılaştığınızda size, hımm, yol gösterecektir!
