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 .
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.
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=
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/*
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