sys.path / PYTHONPATH dizinine dizin ekleniyor


130

Belirli bir dizinden bir modülü içe aktarmaya çalışıyorum.

Sorun şu ki sys.path.append(mod_directory), yolu eklemek için kullanırsam ve sonra python yorumlayıcısını açarsam, dizin mod_directorysys.path listesinin sonuna eklenir. PYTHONPATHDeğişkeni python yorumlayıcısını açmadan önce dışa aktarırsam, dizin listenin başına eklenir. İkinci durumda modülü içe aktarabilirim ancak ilkinde yapamam.

Biri bunun neden olduğunu açıklayabilir ve bir python betiğinin içindemod_directory başlangıca eklemem için bana bir çözüm verebilir mi?


Yanıtlar:


178

Bu, belgelendiği gibi çalışıyor. İçinde belirtilen tüm yollar PYTHONPATH, normal olarak çalışma dizininden sonra, ancak yorumlayıcı tarafından sağlanan standart yollardan önce gelecek şekilde belgelenir. sys.path.append()mevcut yola eklenir. Buraya ve buraya bakın . Belirli bir dizinin önce gelmesini istiyorsanız, bunu sys.path'in başına eklemeniz yeterlidir:

import sys
sys.path.insert(0,'/path/to/mod_directory')

Bununla birlikte, ithalatı yönetmenin genellikle doğrudan kullanmak PYTHONPATHveya manipüle etmekten daha iyi yolları vardır sys.path. Örneğin, bu sorunun yanıtlarına bakın .


Cevap için teşekkürler. Sorun şu ki, bir .egg dosyası olarak paketlenmiş modülü eklemek için sadece python 2.6'daki dizin yerine dosya adını eklemeniz gerektiğini fark etmemiştim
UnadulteratedImagination

2
Hey adamım, bu djangomu bozdu. İnsanlara bunu en üste koymalarını söylemek istediğinizden emin misiniz?!? !!?
R Claven

16
@RClaven, üzgünüm, hangi eylemi ve sonuçları kastettiğini söylemek zor: "en üste koy" ve "django'umu bozdum" çok kesin değil. Detaylandırır mısın
Ned Deily


2
Gerçekten "0" yerine "1" kullanmalısınız! Aksi takdirde sys.path'i bozarsınız . Ayrıca stackoverflow.com/q/10095037/125507 adresine de bakın .
kadee


6

Bana gelince, python yoluma kafe yapmam gerekiyor. Ekleyerek dosyanın yolunu /home/xy/.bashrcekleyebilirim

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH.

Benim için /home/xy/.bashrcdosyanın.

Ama pycharm kullandığımda, yol hala içeride değil.

Böylece PYTHONPATH, çalıştır -> Yapılandırmayı düzenleyerek değişkene yol ekleyebilirim .

görüntü açıklamasını buraya girin


En basit cevap, en iyi cevap, bunu geliştirme için ekleyin, otomatik tamamlamayı işe yarayacak
Çete,

.Bashrc'yi yukarıda açıklandığı gibi güncelledim ancak jupyter not defterine yansıtmadım. Jupyter not defteri modülün hala bulunamadığını söylüyor.
Athar

3

Dizinleri geçici olarak değiştirmek, içe aktarmak için iyi sonuç verir:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

Windows altında Powershell'den bir Python komut dosyası çalıştırırken, bu çalışmalıdır:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
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.