Genel olarak varsayılan PYTHONPATH (sys.path) nasıl değiştirilir?


33

Bir Ubuntu (10.10) sisteminde, kendisini yükleyen bir Python paketim var. /usr/local/lib/python2.6/site-packages/ . Bu, varsayılan yolda (sys.path) bulunmaz. Bu dizini yola nasıl eklerim?

$PYTHONPATHÇevre değişkenini ayarlamak elbette bir çözüm, ancak bunun için daha şık bir yol arıyorum. Örneğin easy_install, içine kurulu paketleri de koyar, sys.path şöyle bir şeye benziyor:

['', '/usr/local/lib/python2.6/dist-packages/keyring-0.5.1-py2.6.egg', 
'/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk',  
'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', 
'/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', 
'/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', 
'/usr/lib/pymodules/python2.6/gtk-2.0']

Bu nedenle, yol açıkça Python ikili dosyasında yerleşik olan varsayılan değil.

Yukarıdaki girişleri içeren tek bir yapılandırma dosyası var mı? Veya değiştirmek hangi yollarla mümkün olabilir?

Yanıtlar:


27

Site modülü dokümantasyon ve değiştirme Python'un Arama Yolu Eğer aradığınızı görünmektedir.

Anladığım kadarıyla, bu girişler tarafından eklenmektedir sys.path:

  • /usr/lib/python2.6/site.py
  • /usr/lib/python2.6/dist-packages/site.py
    (2.6'yı Python sürümünüzle değiştirin.)

Bunu değiştirmenin en kolay yolu /usr/local/lib/python2.6/dist-packages/site-packages.pthiçeren bir dosya eklemektir ../site-packages.

Alternatif olarak, belki de paket kullanmayı öğretebilirsin site.getsitepackages()?


1
teşekkürler, mükemmel çalışıyor :) (/usr/local/python2.6/dist-packages dosyasına "./site-packages" içeren bir .pth dosyası ekleyerek bitirdim)
Latanius

1
Ayrıca adında bir modül oluşturabilirsiniz ithalat çalışır ve değiştirmek orada. sitecustomize.pysite.pysys.path
TestUser16418,

5

/etc/profile.d/local_python.shİçindekilerle adlandırılan yeni bir dosya oluşturabilirsiniz.

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH

PYTHONPATHSisteminizde oturum açan tüm kullanıcılar için değişkeni ayarlayacaktır .


7
Bu gerçekten evrensel değil. /Etc/profile.d mekanizması sadece /etc/profile.d (bash / ksh / zsh) kullanan mermileri olan giriş kabukları için çalışacaktır. Csh kullanıcılarının bu değişikliği görmeyeceğinden eminim. Ayrıca, cron / işlerde dikkate alınmayacaktır.
Rich Homolka

2
bu, küresel ortam değişkenlerini (bugün öğrendiğim başka bir şeyi) ayarlamanın güzel bir yoludur, ancak yazıda belirttiğim gibi, daha Pythonic bir yol arıyordum :)
Latanius

4

Python'un yol değişikliği ile ilgili bulgularımı özetlemek istiyorum. Bunu yapmanın iki yolu var.

  • .pth dosyası
  • PYTHONPATH

Varsayılan yolda bulunan herhangi bir .pth dosyası (aşağıya bakınız) içeriğini içine alır sys.path. Adı geçen .pth dosyasının formatı basittir: satır başına bir (klasör) yol. Şaşırtıcı bir şekilde, yollar mutlak veya .pth dosyasına göre olabilir.

Varsayılan yol, tercümanın bulunduğu ve genellikle bulunduğu <some-prefix>/lib/python<version>/site-packagesyerdir .<some-prefix>/usr/

PYTHONPATHişletim sisteminizin çevresel değişkenidir. Unix sistemlerinde bunları sıralarsınız env. Bu tür değişkenlerin genel modifikasyonu @ TestUser16418'de belirtildiği gibi klasör içindeki .sh betiği ile yapılır /etc/profile.d/.


2
Bu "_" olmadan PYTHONPATH olduğunu
heroxbd

1

Örneğin, sudsbir .eggdosya olarak mevcut olan modülü almak istiyorsanız :

egg_path = '/home/shahid/suds_2.4.egg'

sys.path.append(egg_path)

import suds
# ... rest of code
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.