DistutilsOptionError: must supply either home or prefix / exec-prefix-not both
Zazwyczaj instalowałem Pakiety Pythona przez pip.
Dla Google App Engine, muszę zainstalować pakiety do innego katalogu docelowego.
Próbowałem:
Pip install-I-restful --target ./ lib
Ale zawodzi z:
Must supply either home or prefix / exec-prefix -- not both
Jak mogę to uruchomić?
8 answers
Czy używasz OS X i Homebrew? Strona Pythona Homebrew https://github.com/Homebrew/brew/blob/master/docs/Homebrew-and-Python.md wywołuje znany problem z pip i obejściem.
Zadziałało dla mnie.Możesz ustawić ten" pusty prefiks " jako domyślny, dodając ~/.pydistutils.plik cfg o następującej treści:
[install] prefix=
Edit: nie używaj tej zalecanej opcji Homebrew, to złamie normalny pip operacje .
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
2017-02-13 14:11:13
Wierzę, że istnieje prostsze rozwiązanie tego problemu (Python Homebrew na macOS), które nie złamie normalnych operacji pip.
Wszystko, co musisz zrobić, to utworzyć setup.cfg
plik w katalogu głównym projektu, zwykle tam, gdzie znajduje się główny __init__.py
lub wykonywalny plik py. Jeśli więc głównym folderem twojego projektu jest: /path/to/my/project/
, Utwórz tam plik setup.cfg
i umieść magiczne słowa:
[install]
prefix=
OK, teraz będziesz mógł uruchomić polecenia Pipa dla tego folderu:
pip install package -t /path/to/my/project/
To polecenie będzie uruchamiane tylko dla tego folderu. Po prostu skopiuj setup.cfg
do innych projektów, które możesz mieć. Nie trzeba pisać .pydistutils.cfg
w katalogu domowym. Po zakończeniu instalacji modułów możesz usunąć setup.cfg
.
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
2017-06-23 19:34:32
Innym rozwiązaniem * dla użytkowników Homebrew jest po prostu użycie virtualenv
.
Oczywiście, że Może usunąć potrzebę katalogu docelowego - ale nawet jeśli nie, znalazłem --target
działa domyślnie (jak w, bez tworzenia/modyfikowania pliku konfiguracyjnego), gdy w środowisku wirtualnym.
* mówię rozwiązanie; może to tylko kolejna motywacja do skrupulatnego korzystania z venvs...
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
2016-06-05 16:22:37
Na OSX (mac), zakładając folder projektu o nazwie /var/myproject
cd /var/myproject
- Utwórz plik o nazwie
setup.cfg
i dodaj[install] prefix=
- Run
pip install <packagename> -t .
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
2017-08-14 05:43:46
Trafiłem błędy z innymi zaleceniami wokół --install-option="--prefix=lib"
. Jedyne co znalazłem to użycie PYTHONUSERBASE
zgodnie z opisem tutaj .
export PYTHONUSERBASE=lib
pip install -I flask-restful --user
To nie jest dokładnie to samo, co --target
, ale to działa na moją korzyść w każdym razie.
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
2017-05-23 12:02:51
Jak wspomniano, jest to znany błąd z pip & python zainstalowany z homebrew.
Jeśli utworzysz plik ~/.pydistutils.cfg
z instrukcją "empty prefix", naprawi to ten problem, ale złamie normalne operacje pip.
Dopóki ten błąd nie zostanie oficjalnie rozwiązany, jedną z opcji będzie utworzenie własnego skryptu bash, który obsłuży ten przypadek:
#!/bin/bash
name=''
target=''
while getopts 'n:t:' flag; do
case "${flag}" in
n) name="${OPTARG}" ;;
t) target="${OPTARG}" ;;
esac
done
if [ -z "$target" ];
then
echo "Target parameter must be provided"
exit 1
fi
if [ -z "$name" ];
then
echo "Name parameter must be provided"
exit 1
fi
# current workaround for homebrew bug
file=$HOME'/.pydistutils.cfg'
touch $file
/bin/cat <<EOM >$file
[install]
prefix=
EOM
# end of current workaround for homebrew bug
pip install -I $name --target $target
# current workaround for homebrew bug
rm -rf $file
# end of current workaround for homebrew bug
Ten skrypt zawija Twoje polecenie i:
- akceptuje nazwę i parametry docelowe
- sprawdza, czy te parametry są puste
- tworzy
~/.pydistutils.cfg
Plik z instrukcją "empty prefix" - wykonuje polecenie pip z podanymi parametrami
- usuwa
~/.pydistutils.cfg
plik
Ten skrypt można zmienić i dostosować do swoich potrzeb, ale masz pomysł. I pozwala na uruchomienie polecenia bez hamowania pip. Mam nadzieję, że to pomoże:)
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
2016-12-14 13:14:15
Jeśli używasz virtualenv*, dobrym pomysłem może być podwójne sprawdzenie which pip
używasz.
Jeśli widzisz coś w rodzaju /usr/local/bin/pip
wyrwałeś się ze swojego otoczenia. Reaktywacja virtualenv to naprawi:
VirtualEnv: $ source bin/activate
VirtualFish: $ vf activate [environ]
*: używam virtualfish, ale zakładam, że ta wskazówka dotyczy obu.
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-02-23 19:17:24
Mam podobny problem. Używam flagi --system, aby uniknąć błędu, jak opisuję tutaj w innym wątku, gdzie wyjaśniam konkretny przypadek mojej sytuacji. Zamieszczam to tutaj oczekując, że może pomóc każdemu stojącemu przed tym samym problemem.
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
2017-08-11 00:02:57