--User'ı setup.py install ile --prefix hatasıyla birleştirin


102

Yakın zamanda erişim kazandığım bir sisteme Python paketlerini kurmaya çalışıyordum. Python'un görece yeni kullanıcı site paketleri dizininden ve yeni seçenekten yararlanmaya çalışıyordum --user. (Seçenek şu anda belgelenmemiş , ancak Python 2.6+ için mevcut; çalıştırarak yardımı görebilirsiniz python setup.py install --help.)

Koşmayı denediğimde

python setup.py install --user

İndirdiğim herhangi bir pakette her zaman aşağıdaki hatayı alıyorum:

error: can't combine user with with prefix/exec_prefix/home or install_(plat)base

Gördüğünüz gibi hata derece, çünkü kafa karıştıran oldu ben sağlayarak değildi --prefix, --exec-prefix, --install-base, veya --install-platbasekomut satırı seçenekleri olarak bayraklar. Sorunun ne olduğunu anlamaya çalışırken çok zaman harcadım. Başka bir zavallı ruhu birkaç saat yak tıraşından kurtarmak umuduyla cevabımı aşağıda belgeliyorum .


2
Python 3.6'yı kaynaktan ./configure --prefix=${HOME}"user = 1" varken yüklemeye çalışırken aynı hatayı aldım ~/.pydistutils.cfg. Bu durumda, yükleme işleminin tamamlanabilmesi için geçici olarak "user = 1" yorumuna ihtiyacım var.
bli

bli iyi bir ipucu verdi. Bu seçeneği kullanmamış olsam bile - kullanıcı seçeneğinin nereden geldiğini merak ediyordum. pip kurulumu --prefix / home / myhomedir. ~ / .Pydistutils.cfg dosyam yok, hala --user seçeneğinin ayarlandığı yeri arıyorum.
Kemin Zhou

Sorunun kaynağını bulun. Bu, Debian'a özgüdür. --System seçeneğini ekledikten sonra pip sorunu ortadan kalktı.
Kemin Zhou

Yanıtlar:


160

Tek seferlik geçici çözüm:

pip install --user --install-option="--prefix=" <package_name>

veya

python setup.py install --user --prefix=

Satırından sonra metin (boşluk bile yok) olmadığına dikkat edin =.

Do not unutmak --userbayrağı.

Birden çok paket kurmak:

Oluşturun ~/.pydistutils.cfg(veya OS / platformu için eşdeğeri) aşağıdaki içerikle:

[install]
prefix=

Satırından sonra metin (boşluk bile yok) olmadığına dikkat edin =.

Ardından gerekli pip install --userveya python setup.py install --userkomutları çalıştırın . Do not unutmak --userbayrağı.

Son olarak, bu dosyayı kaldırın veya yeniden adlandırın. Bu dosyayı mevcut durumda bırakmak, --userbu kullanıcı olarak Python paketlerini sistem genelinde (yani, olmadan ) yüklerken sorunlara neden olacaktır ~/.pydistutils.cfg.

Bu sorunun nedeni

Bu, hem OpenSUSE hem de RedHat ile ilgili bir sorun gibi görünüyor ve bu, bu platformlarda virtualenv'de bir hataya yol açmıştır .

Hata, sistem düzeyinde bir distutils yapılandırma dosyasından (benim durumumda /usr/lib64/python2.6/distutils/distutils.cfg) kaynaklanıyor

[install]
prefix=/usr/local

Temel olarak bu, install komutunu her zaman olarak çalıştırmaya eşdeğerdir install --prefix=/usr/local. Yukarıdaki tekniklerden birini kullanarak bu özelliği geçersiz kılmalısınız.


1
Çok teşekkür ederim. Boş önek sorunumu çözdü: pip 1.1 openSuSE 11.4.
guettli

6
Sistem çapında distutils.cfg
Tuxdude 08

2
Vaov! Bu benim için de çalıştı. Powerline'ı kurmaya çalışırken aynı hatayı aldım. powerline.readthedocs.org/en/latest/installation/…
A-Dubb

4
İkinci olarak, bunu yapmak BÜYÜK sorunlara neden olacaktır. Bu dosyayı etrafta SAKLAMAYIN. Daha fazla bilgi için demleme doktoruna bakın (Mac OS X'te homebrew kullandığınızı varsayarak).
A-Dubb

1
Bu dosyayı bu şekilde tutmanın, Python'un / kök python kitaplık dizininiz olduğunu düşünmesine neden olacağını ve diğer yeni paketleri yüklemeye çalıştığınızda kafa karıştırıcı sorunlara yol açacağını unutmayın.
rogueleaderr

6

Yorumlarda belirtildiği gibi, kabul edilen cevap (muhtemelen genlere sahip olan @gotgenes tarafından) beklenmedik sonuçlara yol açabilir.

@rogeleaderr, "Bu dosyayı böyle tutmanın Python'un / kök python kitaplık dizininiz olduğunu düşünmesine neden olacağını ve diğer yeni paketleri yüklemeye çalışırsanız kafa karıştırıcı sorunlara yol açacağını unutmayın."

@Gotgenes'in önerdiği gibi yeni bir yapılandırma dosyası yazmak yerine, daha iyi bir seçenek --prefix= (eşittir işaretinin sağına metin olmadan) komut satırında olduğu gibi eklemektir .

$ python setup.py install --user --prefix=

5

Mevcut yanıtlar benim için çalışmadığı için başkalarına zaman kazandırmak için gönderi paylaşıyorum ...

Bazı ortamlarda, --target( -t) anahtarını kullanmak yine de aynı hataya neden olur. İki linux çeşidi üzerinde yaptığım testlerde, --prefix=parametreyi kullanırken aynı sorunla karşılaştım .

Kod:

PYTHONUSERBASE=/tmp/ pip install --user --force-reinstall $PACKAGE

Açıklama: Pek çok ortamda (MacOS, Amazon Linux, Debian) işe yarıyor gibi görünen çözümüm, PYTHONUSERBASEortam değişkenini geçici bir konuma ayarlamaktır. --force-reinstallpaket zaten kurulu olsa bile yerel yüklemeyi tetiklemek için kullanılır.

Bu, modülün (işletim sistemi ve Python sürümüne bağlı olarak) derlenip / kurulmasıyla sonuçlanacaktır: /tmp/lib/python2.7/site-packages/*


0

Basitçe çalıştırabilirsiniz pip install --user ., ön ek bağımsız değişken gerekmez.

Bu yine de daha iyidir çünkü pip'iniz Python 3 kullanacak şekilde yapılandırılmışsa varsayılan olarak python3 olacaktır. (Girmeyi unuttum python3 setup.pyve 2.7'nin altında yalnızca 3'lü bir paket kurdu)

(kredi https://stackoverflow.com/a/1550235/4364036 )


0

Ben de aynı sorunu yaşadım. Şununla gizlenmişti ~/.config/pip/pip.conf:

[global]
target=/foo/bar

Böyle bir yapılandırma, bilgim olmadan üçüncü taraf bir komut dosyası tarafından oluşturuldu.

Pip yapılandırma dosyalarını kontrol etmenizi ve target=/foo/barseçenekleri kaldırmanızı öneririm .

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.