$ HOME klasörüne pip paketleri yükleme


330

Mümkün mü? Yüklerken pip, python paketlerini $HOMEklasörüme yükleyin . (örneğin, ben yüklemek istediğiniz mercurialkullanarak pip, ama içinde $HOMEyerine /usr/local)

Ben bir mac makinesi ile ve sadece bu olasılığı düşündüm, benim "kirletmek" yerine, /usr/localbenim $HOMEyerine kullanmak istiyorum .

PEP370 tam olarak bununla ilgilidir . Bu paketleri yalnızca $ HOME klasörüme yüklenecek şekilde oluşturmak ˜/.localve yapmak pip install packageyeterli mi?


Virtualenv'i kontrol ettin mi? İzole bir ortamda pip'li paketleri kurabilirsiniz.
joet3ch

2
Bunu düşündüm, ancak mevcut python'u (2.6.1) kullanarak bazı python uygulamaları yüklemek istiyorum, ancak / usr / local / 'a yüklemek yerine, $ HOME klasörüne yükleyin ve $ PATH'a ekleyin. Bunun mümkün olup olmadığını ve bu yaklaşımın uyarılarını bilmek istiyorum.
Birisi hala seni MS-DOS

11
PEP370'i tanıtmak için +1. Bu, daha fazla insanın bilmesi gereken basit ama kullanışlı bir seçenektir.
Ned Deily

Benzer bir problemle savaşıyordum (muhtemelen yanlış yapılandırılmış pip ve iki farklı piton için easy_install'dan kaynaklanıyor). Son çare olarak, düz kullanmaya çalıştım $ python setup.py --user install. Ve işe yaradı. Paket artık ev alt dizinine kurulur ve beklendiği gibi çalışır. Sunucu yöneticimle konuşmak zorunda kalacak.
Jan Vlcinsky

1
PIP kurmanız gerekiyorsa, wget https://bootstrap.pypa.io/get-pip.pytakip eden gibi bir şey yapın python get-pip.pyve gitmeye hazırsınız. Yüklü PIP'nin çok eski olduğu bir makinedeyseniz (benim için durum buydu) faydalı olabilir. Daha fazla bilgi için pip.readthedocs.org/en/latest/instal.html adresine bakın .
Markus

Yanıtlar:


463

A kullanabilirsiniz virtualenv, ancak gerekmez. Hile, PEP370 --userargümanını betiğe geçiriyor setup.py. En son sürümüyle, pipbunu yapmanın bir yolu:

pip install --user mercurial

Bu, hgbetiğin yüklenmesine $HOME/.local/bin/hgve geri kalan hg paketiyle sonuçlanmalıdır $HOME/.local/lib/pythonx.y/site-packages/.

Yukarıdakilerin Python 2.6 için geçerli olduğunu unutmayın. Bir yaşandı tartışmalara biraz PEP370 tarzı için Mac OS X üzerinde uygun dizin konumu ne olduğu hakkında Python çekirdek geliştiricileri arasında usertesisler. Python 2.7 ve 3.2, Mac OS X üzerinde yer değiştirildi $HOME/.localkadar $HOME/Library/Python. Bu, gelecekteki bir sürümde değişebilir. Ancak, şimdilik, 2.7'de (ve hgPython 3'te destekleniyorsa 3.2 ), yukarıdaki konumlar $HOME/Library/Python/x.y/bin/hgve olacaktır $HOME/Library/Python/x.y/lib/python/site-packages.


İyi bir nokta. Ne yazık ki, Python 2.7'de OS X çerçeve derlemeleri için PYTHONUSERBASE'in yok sayılmasına neden olan bir hata var. Python 2.7.3 için düzeltilecektir.
Ned Deily

1
Bu çok ilginç görünüyor. easy_installMac OS X'te varsayılan olarak yüklü olarak gelir, bu nedenle yalnızca pip $HOMEklasörünün dışında yüklü olurdu .
Birisi hala MS-DOS

1
PYTHONUSERBASE'i başka bir konuma değiştirmeye çalıştım. Başarı yok. Bu özellikle Windows üzerinde nasıl yapılır?
Snerd

2
Bunu yaparsanız ve daha sonra conda ortamlarını kullanmaya çalışırsanız, yüklü dosyaların .localher zaman önce vurulacağını ve bu da ithalat hatalarını izlemenin çok zor olabileceğini unutmayın.
tacaswell

12
OSX'te, kullanıcı sitesi dizininin bin klasörünün PATH üzerinde olmadığını unutmayın. Bu, kullanıcı sitesi dizinindeki paketler tarafından yüklenen komut dosyalarının siz olmadığınız sürece çalıştırılamayacağı anlamına gelir export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron

21

HOME dizininizde virtualenv kullanırdım.

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

Daha sonra ~/.(login|profile|bash_profile), kabuğunuzun PATH'ınıza ~ / bin eklemesi için hangisi doğru olursa, bunu değiştirebilirsiniz pip|python|easy_install. Bu varsayılan olarak kullanılır.


9
"Fiili" Bunu yapmanın yolu ise virtualenv venv, source venv/bin/activate. Her zaman virtualenv'inizi kullanmak istemeyebilirsiniz ve bu yöntemi kullanarak, istemi öneklemenin önüne ekler (venv).
nyuszika7h

2
@ nyuszika7h Virtualenv'in nasıl kullanılacağını biliyoruz. Ama bu gerçekten soruyu cevaplıyor ve çok düzgün bir çözüm.
itsafire

8
@itsafire "Biz" kimdir? Okumaktan tavsiye en.wikipedia.org/wiki/Weasel_word
nyuszika7h

3
Her neyse, katılmıyorum, bu "düzgün bir çözüm" değil. Anlamsız bir hack.
nyuszika7h

19

Sen belirtebilirsiniz -tseçeneği ( --targethedef dizini belirtmek için). pip install --helpAyrıntılı bilgi için bakınız . Bu, ihtiyacınız olan komuttur:

pip install -t path_to_your_home package-name

Örneğin, dizinime mxnet yüklemek için şunu yazıyorum $HOME:

pip install -t /home/foivos/ mxnet

Bir hata alıyorum distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Bu ne demek?
Anthony Kong

İlgili bir tartışma için github.com/pypa/pip/issues/3826 adresini ziyaret edin . Bu konuda daha fazla bir şey bilmiyorum, ama çevremde hiçbir zaman bir sorunla karşılaşmadım.
Foivos
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.