PYTHONPATH dizinine kalıcı olarak bir dizin eklensin mi?


324

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:


135

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.


8
Errata: Pencerelerde ayırıcı noktalı virgül kullanır. Windows'ta sistem yollarını geçersiz kılmanız gerekiyorsa, kullanıcı değişkenleri sistem değişkenlerine eklendiğinden, GUI aracılığıyla bir kullanıcı ortamı değişkeni olarak ayarlamak yeterli olmayabilir. Bu durumlarda, gerekli ayarlamaları yapan bir başlangıç ​​komut dosyasına başvurmanız gerekir.
Nathan Ernst

1
Eğer (bir ders yönetici iseniz) @Nathan, noktalı virgül hatırlatmada tx, ama olabilir set sistem pencerelerde env.vars (artı, OP nasıl soran değildir geçersiz etmek ne kadar, yolunu ekler kendisine , yani, bir kullanıcı env.var da bunun için iyi olacak! -).
Alex Martelli

ne yazık ki iş bilgisayarımda yönetici değilim, bu yüzden bu tür önlemlere başvurmak zorundayım. :(
Nathan Ernst

439

Bash (Mac veya GNU / Linux dağıtımında) kullanıyorsanız, bunu ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path"

28
Bu benim için mükemmel çalıştı, ancak en üstteki az bulunur işaret emin dizini yapmak init dizin yapısında .py dosyasını. Bu ilk başta benim için tam olarak belli değildi. Örneğin, ihracat PYTHONPATH = $ PYTHONPATH: / Users / joey / repos denedim ama depoları dizinin _ init_ .py olmadığı için işe yaramadı . Bir dizin daha ileri gitmek: / Users / joey / repos / özgülRepo hile yaptı. Şimdi python, init .py içeren özgülRepo dizinine bağlı herhangi bir aşağı dizinde gezinebilir!
Qiao Yi

3
bu benim için çalıştı ama bu PYTHONPATH değişkeninin nerede olduğunu açıklayabilir misiniz? ve "PYTHONPATH dosyasını dışa aktar" bu dosyanın tam yerini nasıl bulabilir?
appleLover

42
düzenledikten ~/.bashrcsonra hatırlayın sonra çalıştırın source ~/.bashrcbkz. stackoverflow.com/questions/2518127/…
b_dev

2
Bence sudo su.bashrc dosyanızın başına koymak kötü bir fikir . Bu yazı benimle aynı fikirde. En azından benim sistemimde bile gerekli değil.
LondraRob

İşte cevap.
Aerin

88

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 2.6 kullanarak bunu denedim ve benim için çalışmıyor gibi görünüyor
Lorcan O'Neill

4
Bu dizini kendi kütüphane dizinime bağladım ve tüm scriptlerimi orada sakladım. İyi çalıştı.
firesofmay

Bu konuyu tekrar bulduktan sonra tekrar denemek için çözüldü ve bu sefer yukarıdaki gibi çalışmayı başardı! Özür diler ve özür dilerim :)
Lorcan O'Neill

Bu sadece mükemmel çalışıyor, ben doğru yolda idi ama python -m site --user-siteve (create the directory if it doesn't exist)parçaları çalışmak için eksik olan şeydi.
Aurélien Ooms

1
Python'un eklenen yolu tanıması için ek bir adım atmam gerekir somelib.pthmi? Değilse, bunun neden işe yaramayabileceğini tahmin ediyor musunuz?
Miladiouss

38

Bu Windows üzerinde çalışır

  1. Windows'da Python 2.7 ile Python kurulum klasörüne gidin.
  2. Lib / site paketlerini açın.
  3. Bu klasöre bir example.pth boş dosya ekleyin.
  4. Dosyaya gereken yolu her satırda bir tane olacak şekilde ekleyin.

Ardından, bu yollardaki tüm modülleri komut dosyalarınızdan görebilirsiniz.


3
IMO, bu en iyi çözümdür, çünkü kabuk veya çalışma ortamının seçimine bağlı değildir. Varsayılan python yolunun "/usr/local/lib/pythonX.Y/site-packages" olduğu linux üzerinde de çalışır. Bu işe yaramazsa, bunun yerine .pth dosyanızı dist-Packages dizinine koymayı deneyin.
matus

1
Windows 7, Python 3.6.5. İşte cevap. Auserdude'nin yazdığı gibi: Python'un Lib / site paketleri klasöründe "example.pth" dosyasını oluşturun ve yolunuzu şu şekilde ekleyin: C: \ somefolder \ anotherfolder \ targetfolder
JayJay123 25:18

mükemmel cevap, ayrıca Windows 10'da python 3.7 ile çalışır, benim Windows 10 yolu: "C: \ Kullanıcılar \ {usrName} \ AppData \ Local \ Programs \ Python \ Python37-32 \ Lib"
Ali80

Windows 10'da Python 3.6.7 için çalıştığını doğrulayabilir. Bununla birlikte, yolun PYTHONPATH'ınıza eklendiğini ve bir çarpışma durumunda eklenen modülünüzün bulunamayacağını unutmayın.
19:26

25

Herkesin hala kafası karışmışsa - Mac kullanıyorsanız, aşağıdakileri yapın:

  1. Terminali Aç
  2. tip open .bash_profile
  3. Açılan metin dosyasına bu satırı sonuna ekleyin: export PYTHONPATH=$PYTHONPATH:foo/bar
  4. Dosyayı kaydedin, Terminal'i yeniden başlatın ve işiniz bitti

2
Python yolunu nasıl göreceğini merak eden herkes, şunu kullanın: hangi python
Arindam Roychowdhury

terminali de yeniden yüklemeniz gerektiğinden emin olabilirsiniz
User

Aslında exportanahtar eksikti şeydi !!!!, upvoted, çok teşekkürler!
a_m_dev

21

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 .


40
sys.path.append ('/ path / to / dir') girdiyi kalıcı olarak eklemez.
jeremyjjbrown

15

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.


10

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 .


1
Eğer doğru anlıyorsam bu sadece terminal üzerinden başlatılan Python oturumları için değişken ihraç edecek değil mi?
jxramos

1
@jxramos - evet!
Peter Piper

9

Linux'ta, ortam değişkenleriyle uğraşmak zorunda kalmadan paketinizden PYTHONPATH dizinine sembolik bir bağlantı oluşturabilirsiniz. Gibi bir şey:

ln -s /your/path /usr/lib/pymodules/python2.7/

7

Ş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ı


Yaptım 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ı?
Anu

export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection, PYTHONPATH'i ilk kez ihraç ederken, ${PYTHONPATH}:parça olmadan yapmak zorundasınız
boyangeor

Teşekkürler, ancak bilgisayarımı her yeniden başlattığımda python yolu sıfırlanır alıyorum 1. i ayarlayın :<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?
Anu

7

MacOS'ta, belirli bir kitaplığa yol vermek yerine. Kök proje klasörüne tam yol vermek

~/.bash_profile 

benim günümü yaptı, örneğin:

export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"

bundan sonra:

source ~/.bash_profile

6

Sadece awesomo cevabı üzerine eklemek, ayrıca o satırı içine ekleyebilir sizin ~/.bash_profileveya~/.profile


.bash_profileGiriş kabuğu kullanıyorsanız ekleyin , aksi takdirde kullanın.profile
smac89

3

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.


2

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ı.


1

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))

1

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.


0

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


-3

A-- B arasındaki en kısa yol düz bir çizgidir;

import sys
if not 'NEW_PATH' in sys.path:
  sys.path += ['NEW_PATH']
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.