Ne zaman kullansam sys.path.append, yeni dizin eklenir. Ancak, bir kez python kapattığınızda, liste önceki (varsayılan?) Değerlerine geri döner. Bir dizini kalıcı olarak nasıl eklerim PYTHONPATH?
Ne zaman kullansam sys.path.append, yeni dizin eklenir. Ancak, bir kez python kapattığınızda, liste önceki (varsayılan?) Değerlerine geri döner. Bir dizini kalıcı olarak nasıl eklerim PYTHONPATH?
Yanıtlar:
Yeni dizininizi PYTHONPATH, önceki içeriğinden iki nokta üst üste işaretiyle ayrılmış olarak ortam değişkenine eklemeniz gerekir . Unix'in herhangi bir biçiminde, bunu, kullandığınız kabuğa ( .profileveya favori kabuğunuza bağlı olan her ne olursa olsun) uygun bir başlangıç komut dosyasında , yine söz konusu kabuğa bağlı olan bir komutla yapabilirsiniz; Windows'ta, bunu sistem GUI'si üzerinden yapabilirsiniz.
superuser.com daha fazla bilgi almak için daha iyi bir yer olabilir, yani seçtiğiniz platformda ve kabuğunuzda bir ortam değişkenini nasıl zenginleştireceğinize ilişkin ayrıntılara ihtiyacınız varsa daha fazla ayrıntı için, çünkü bu aslında bir programlama sorusu değildir.
Bash (Mac veya GNU / Linux dağıtımında) kullanıyorsanız, bunu ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrcsonra hatırlayın sonra çalıştırın source ~/.bashrcbkz. stackoverflow.com/questions/2518127/…
Değiştirmek yerine PYTHONPATHbir yol yapılandırma dosyası da oluşturabilirsiniz . İlk önce Python'un bu bilgiyi hangi dizinde aradığını bulun:
python -m site --user-site
Bazı nedenlerden dolayı bu Python 2.7'de çalışmıyor gibi görünüyor. Orada kullanabilirsiniz:
python -c 'import site; site._script()' --user-site
Ardından .pth, bu dizinde eklemek istediğiniz yolu içeren bir dosya oluşturun (yoksa dizini oluşturun).
Örneğin:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
python -m site --user-siteve (create the directory if it doesn't exist)parçaları çalışmak için eksik olan şeydi.
somelib.pthmi? Değilse, bunun neden işe yaramayabileceğini tahmin ediyor musunuz?
Bu Windows üzerinde çalışır
Ardından, bu yollardaki tüm modülleri komut dosyalarınızdan görebilirsiniz.
Herkesin hala kafası karışmışsa - Mac kullanıyorsanız, aşağıdakileri yapın:
open .bash_profileexport PYTHONPATH=$PYTHONPATH:foo/barexportanahtar eksikti şeydi !!!!, upvoted, çok teşekkürler!
Yolu, varsayılan olarak linux'daki ~ / .pythonrc olan pythonrc dosyanızla ekleyebilirsiniz. yani.
import sys
sys.path.append('/path/to/dir')
PYTHONPATHOrtam değişkenini ~/.profilemac veya linux gibi genel bir rc dosyasında veya Windows'ta Denetim Masası -> Sistem -> Gelişmiş sekmesi -> Ortam Değişkenleri aracılığıyla da ayarlayabilirsiniz .
Biraz daha açıklama yapmak için, Python arama yollarını ( yukarıda ve burada belirtildiği gibi ) site.pykomut dosyasını kullanarak (genellikle sys.prefix + ' lib/python<version>/site-packagesda bulunur) otomatik olarak oluşturur lib/site-python. Bir sys.prefix değerini elde edebilirsiniz:
python -c 'import sys; print(sys.prefix)'
Site.py Daha sonra komut dosyası gibi platforma bağlı dizinleri, bir dizi ekler /usr/{lib,share}/python<version>/dist-packages, /usr/local/lib/python<version>/dist-packagesarama yoluna ve ayrıca bu yolları arar <package>.pthözel ek arama yollarını ihtiva yapılandırma dosyalarını. Örneğin easy-install , sisteme özgü bir dosyaya eklenmiş olan kurulu paketler koleksiyonunu korur, örneğin Ubuntu'da /usr/local/lib/python2.7/dist-packages/easy-install.pth. Tipik bir sistemde, sys.path dosyasındaki bazı beklenmedik yolları açıklayabilen bu .pth dosyalarından bir demet vardır:
python -c 'import sys; print(sys.path)'
Böylece .pth dosyası oluşturulabilir ve bu dizinlerden herhangi birine ( yukarıda belirtilen sitedir dahil) konabilir . Bu, PYTHONPATH kullanmak yerine çoğu paketin sys.path'e eklenme şekli gibi görünüyor.
Not: OSX'te 'framework builds' için site.py tarafından eklenen özel bir ek arama yolu vardır (ancak python'un normal komut satırı kullanımı için çalışıyor gibi görünüyor): /Library/Python/<version>/site-packages(örneğin, Python2.7: için /Library/Python/2.7/site-packages/). yüklenmelidir (bu dizindeki README'ye bakın). Biri adında bir dosya oluşturmak örn ek arama yolları orada içeren bir yol yapılandırma dosyası ekleyebilir Yani /Library/Python/2.7/site-packages/pip-usr-local.pthiçeren /usr/local/lib/python2.7/site-packages/ve ardından sistem piton arama yolunu ekleyecektir.
Benim için .bash_profiledosyayı değiştirdiğimde işe yaradı . Sadece .bashrcdosyayı değiştirmek sadece kabuğu yeniden başlatana kadar çalıştı.
Python 2.7 için şöyle görünmelidir:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
.bash_profiledosyanın sonunda .
Şu anda yoksa export PYTHONPATH="${PYTHONPATH}:/my/other/path", ~ / .bashrc öğesine eklemek işe yaramayabilir .PYTHONPATH:
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Yukarıdakileri ~ / .bashrc'ye eklemek Ubuntu 16.04'te benim için hile yaptı
echo PYTHONPATHve hiçbir şey gelmedi ! Sadece bu çizgiyi yapıştırın böylece yollarla bu PYTHONPATH, initilised edilmemiş export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detectionbenim de ~/.bashrcdosya ve source ~/.bashrc bunun. Daha sonra `` PYTHONPATH '' yankısını yaptığımda bana verdi :<PATH_TO_TF>/TensorFlow/models/research/object_detection, Yanlış bir şey yapıp yapmadığım konusunda herhangi bir öneriniz var mı?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection, PYTHONPATH'i ilk kez ihraç ederken, ${PYTHONPATH}:parça olmadan yapmak zorundasınız
:<PATH_TO_TF>/TensorFlow/models/research/object_detectionve 2 kaldırır export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim. herhangi bir öneri, nasıl düzeltilir?
PYTHONPATH için yeni bir yol ekleme işlemi manuel olarak şu şekilde yapılır:
~ / .bashrc profilinize giden yolu şu şekilde ekleyin:
vim ~/.bashrc
aşağıdakileri profilinize yapıştırın
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
sonra, kodunuzu terminalde çalıştırdığınızda bashrc profilinizi kaynakladığınızdan emin olun:
source ~/.bashrc
Bu yardımcı olur umarım.
Windows Vista, Python 3.5'e kalıcı olarak ekledim
Sistem> Denetim Masası> Gelişmiş sistem ayarları> Gelişmiş (dokunun) Ortam Değişkenleri> Sistem değişkenleri> (Değişken sütununda PYTHONPATH görmüyorsanız) (tıklayın) Yeni> Değişken adı: PYTHONPATH> Değişken değeri:
Lütfen dizini Değişken değerine yazın. Blue Peppers'ın cevabının ayrıntıları.
Aşağıdaki betik saf Python olduğu için tüm platformlarda çalışır. Çapraz platformda çalışması için https://docs.python.org/3/library/pathlib.html burada belgelenen pathlib Yolunu kullanır . Bir kez çalıştırın, çekirdeği yeniden başlatın ve hepsi bu. Esinlenerek https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574 .
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
Bu, bazı eski cevapları olan bu konu için bir güncellemedir.
MAC-OS Catalina veya biraz daha yeni (> = 10.15) kullananlar zshiçin, (eski yerine) adlı yeni bir Terminal tanıtıldı bash.
Bu değişiklik nedeniyle yukarıdaki cevaplar ile bazı sorunlar vardı ve ben biraz dosya oluşturmak ~/.zshrcve dosya dizini yapıştırarak bir çözüm yaptım ve $PATHve$PYTHONPATH
İlk olarak yaptım:
nano ~/.zshrc
Editör açıldığında aşağıdaki içeriği yapıştırdım:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
kaydetti ve terminali yeniden başlattı.
ÖNEMLİ: Yukarıdaki yol bilgisayarımın yoluna ayarlanmışsa, bunu python'unuza uyarlamanız gerekir.
Python 3.6.4'te aşağıdaki gibi python oturumlarında sys.path'e devam edebilirsiniz:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
Virtualenv ve virtualenvwrapper kullanmanızı şiddetle tavsiye ederim, aksi takdirde yolunuzu karıştıracaksınız