Python komut dizisinde PYTHONPATH'ı nasıl ayarlarım?


115

Bunu / etc / profilimde ve ortam değişkenlerimde nasıl ayarlayacağımı biliyorum.

Peki ya onu bir komut dosyası sırasında ayarlamak istersem? OS, sys ithal mi? Nasıl yaparım?

Yanıtlar:


192

Ayarlamazsınız PYTHONPATH, girişleri eklersiniz sys.path. Python paketleri için aranması gereken dizinlerin bir listesidir, böylece dizinlerinizi bu listeye ekleyebilirsiniz.

sys.path.append('/path/to/whatever')

Aslında, yol ayırıcı karakterindeki sys.pathdeğeri bölerek başlatılır PYTHONPATH( :Linux benzeri sistemlerde, ;Windows'ta).

Bunu kullanarak dizinleri de ekleyebilirsiniz site.addsitedirve bu yöntem, .pthilettiğiniz dizinlerde bulunan dosyaları da hesaba katacaktır . (Belirttiğiniz dizinlerde durum böyle olmaz PYTHONPATH.)


11
Bu cevabın gönderilmesinden bu yana uzun yıllar geçti, ancak yine de eklemek istiyorum ki, Python'un yeni dizini içe aktarırken diğerlerinin hepsinden önce kontrol etmesini istiyorsanız, listenin başına yeni dizini koymalısınız. içinde sys.path.insert(0, '/path/to/whatever').
wecsam

39

Ortam değişkenlerini şu yolla alabilir ve ayarlayabilirsiniz os.environ:

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."

Ancak tercümanınız zaten çalıştığı için bunun bir etkisi olmayacaktır. Kullanman daha iyi

import sys
sys.path.append("...")

bu, PYTHONPATHyorumlayıcı başlangıcında dönüştürüleceğiniz dizidir .


18

Kontrolsüz koyarsanız sys.path.append('dir/to/path'), zaten eklenmişse, içinde uzun bir liste oluşturabilirsiniz sys.path. Bunun için şunu tavsiye ederim:

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory

2
Güzel. Çok Pythonic.
Kısmi Sipariş

1
PythonPath'i nasıl boşaltabilirim? Ben eklemek istemiyorum. Boşaltmak ve sadece istediğimi içine koymak istiyorum. Bunu yapmanın bir yolu var mı?
Schütze

Sys.path .__ init __ () 'i çağırarak onu yeniden başlatmayı denediniz mi? Bu, python yolunu boşaltmalıdır. Bu yardımcı olur umarım.
2019

@ francisco-manuel-garca-botella Eski soruları yanıtlamak bu sitede çok hoş geldiniz! Üzülecek bir şey yok.
user7610

Bunun pitonik olduğuna katılmıyorum ve bunun iyi bir programlama yaklaşımı olmadığını öne sürüyorum. İstisna işlemi, istisna meydana geldiğinde çok pahalıdır, bu nedenle onu, else'i kullanmanız oldukça olası olan bir "if" ifadesinin yerine kullanmak istemezsiniz. Sys.path içinde basit bir if 'myypath' ... else ... benim tavsiyem olacaktır.
markgalassi

6

PYTHONPATH , çalışma zamanında değiştirebileceğiniz sys.path'de biter .

import sys
sys.path += ["whatever"]

Bu cevabı @DavidZ'den tercih etmek için bir neden var mı?
Dror

Hiçbir şey değilse, daha az ayrıntılıdır.
üçlü

-1

Belirleyebileceğiniz PYTHONPATHtarafından, os.environ['PATHPYTHON']=/some/pathardından aramak gerekir os.system('python')yeni eklenen yolu etkili hale getirmek için piton kabuk yeniden.


1
os.system()"python kabuğunu yeniden başlatmaz", yeni bir etkileşimli Python örneği başlatır. Bundan geri döndüğünüzde, arama senaryosuna geri dönersiniz.
üçlü

-2

Ben de linux bu çalışıyor:

import sys
sys.path.extend(["/path/to/dotpy/file/"])
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.