Połącz błąd --user z -- prefix z setup.py zainstaluj

Próbowałem zainstalować Pakiety Pythona system, do którego niedawno uzyskałem dostęp. Próbowałem wykorzystać relatywnie Nowy na stronę użytkownika-katalog packages i nową opcję --user. (Opcja jest obecnie nieudokumentowana, jednak istnieje dla Pythona 2.6+; możesz zobaczyć pomoc, uruchamiając python setup.py install --help.)

When I tried running

python setup.py install --user

Na każdym pobranym pakiecie zawsze pojawia się następujący błąd:

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

Błąd był niezmiernie kłopotliwe, bo jak widzisz, nie zapewniałem --prefix, --exec-prefix, --install-base, or --install-platbase flags as command line options. Zmarnowałem dużo czasu, próbując rozgryźć, w czym tkwi problem. Poniżej dokumentuję swoją odpowiedź, mając nadzieję oszczędzić innej biednej duszy kilka godzin Jak golenia .

Author: gotgenes, 2010-12-21

3 answers

Obejście czasu:

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

Lub

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

Zauważ, że po = nie ma tekstu (nawet spacji).

Do Nie zapomnij o fladze --user.

Instalowanie wielu pakietów:

Utwórz ~/.pydistutils.cfg (lub odpowiednik dla Twojego systemu operacyjnego/platformy) z następującą zawartością:

[install]
prefix=

Zauważ, że po = nie ma tekstu (nawet spacji).

Następnie uruchom niezbędne polecenia pip install --user lub python setup.py install --user. Do Nie zapomnij o fladze --user.

Na koniec usuń lub zmień nazwę tego pliku. Pozostawienie tego pliku spowoduje problemy podczas instalowania pakietów Pythona w całym systemie (tzn. bez --user), Jak ten użytkownik z tym ~/.pydistutils.cfg.

Przyczyna tego problemu

W przeciwieństwie do OpenSUSE i RedHat, nie są one dostępne w wersji 3.0.1, lecz w wersji 3.0.1.1, która nie jest dostępna w wersji 3.0.1.1.

Błąd wynika z pliku konfiguracyjnego na poziomie systemu distutils (w moim przypadku /usr/lib64/python2.6/distutils/distutils.cfg) where there was this

[install]
prefix=/usr/local

Zasadniczo jest to równoważne zawsze uruchamianiu polecenia install jako install --prefix=/usr/local. Musisz nadpisać tę specyfikację za pomocą jednej z powyższych technik.

 128
Author: gotgenes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 14:59:34

Jak zauważono w komentarzach, przyjęta odpowiedź (przez @ gotgenes, który prawdopodobnie ma geny) może prowadzić do nieoczekiwanych konsekwencji.

@ rogeleaderr mówi: "zauważ, że utrzymywanie tego pliku w ten sposób sprawi, że Python będzie myślał, że / jest twoim głównym katalogiem biblioteki Pythona, co prowadzi do mylących problemów, jeśli spróbujesz zainstalować inne nowe pakiety."

Zamiast pisać nowy plik konfiguracyjny, jak zaleca @gotgenes, lepszym rozwiązaniem jest dodanie --prefix= (bez tekstu po prawej stronie znak) jako opcja w linii poleceń , jak w

$ python setup.py install --user --prefix=
 3
Author: dbliss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 06:18:01

Publikowanie, aby zaoszczędzić innym czas, ponieważ brak dostępnych odpowiedzi nie zadziałał dla mnie...

W niektórych środowiskach, używając --target (-t) przełącznik nadal trafi ten sam błąd. W moich testach na dwóch wersjach Linuksa napotkałem ten sam problem przy użyciu parametru --prefix=.

Kod:

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

Wyjaśnienie: Moim obejściem, które wydaje się działać w wielu środowiskach (MacOS, Amazon Linux, Debian) jest ustawienie zmiennej środowiskowej PYTHONUSERBASE na lokalizację tymczasową. --force-reinstall jest używany do wyzwalania instalacja lokalna nawet wtedy, gdy pakiet jest już zainstalowany.

Spowoduje to, że moduł zostanie skompilowany/zainstalowany (w zależności od wersji systemu operacyjnego i Pythona) do: /tmp/lib/python2.7/site-packages/*

 2
Author: EE1213,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-09 22:13:10