Zazwyczaj instalowałem pakiety Pythona przez pip.
W przypadku Google App Engine muszę zainstalować pakiety w innym katalogu docelowym.
Próbowałem:
pip install -I flask-restful --target ./lib
ale zawodzi z:
musi podać home lub prefix / exec-prefix - nie oba
Jak to działa?
pip install
operacje :(--target
, nie psując domyślnegopip install
zachowania?Uważam, że istnieje prostsze rozwiązanie tego problemu (Python firmy Homebrew na macOS), które nie zakłóci 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. Więc jeśli katalog główny twojego projektu to/path/to/my/project/
:, utwórz tamsetup.cfg
plik i umieść w nim magiczne słowa:OK, teraz możesz uruchomić polecenia pip dla tego folderu:
To polecenie będzie działać z wdziękiem tylko dla tego folderu. Po prostu skopiuj
setup.cfg
do innych projektów, które możesz mieć. Nie musisz pisać.pydistutils.cfg
w swoim katalogu domowym.Po zainstalowaniu modułów możesz je usunąć
setup.cfg
.źródło
setup.cfg
części po instalacji. Spaliłem całe 2 dni, próbując dowiedzieć się, dlaczego moje środowisko virtualenv zostało zepsute, z błędami takimi jakCould not install packages due to an EnvironmentError: [Errno 1] Operation not permitted: '/bin/easy_install'
. Usunięcie pliku instalacyjnego przywróciło mi zdrowie psychiczneW systemie OSX (Mac) przy założeniu folderu projektu o nazwie / var / myproject
cd /var/myproject
setup.cfg
i dodaj[install] prefix=
pip install <packagename> -t .
źródło
-t .
zamiast przebywać poza katalogiem . U mnie ten sposób zadziałał, a drugi nie, choć nie mam pojęcia dlaczego.Innym rozwiązaniem * dla użytkowników Homebrew jest po prostu użycie pliku
virtualenv
.Oczywiście może to i tak usunąć potrzebę katalogu docelowego - ale nawet jeśli nie, znalazłem, że
--target
działa domyślnie (jak w, bez tworzenia / modyfikowania pliku konfiguracyjnego) w środowisku wirtualnym.* Mówię rozwiązanie; może to tylko kolejna motywacja do skrupulatnego stosowania venvów ...
źródło
Występują błędy z innymi zaleceniami dookoła
--install-option="--prefix=lib"
. Okazało się, że jedyne, co zadziałało, to używanie wPYTHONUSERBASE
sposób opisany tutaj .to nie jest dokładnie to samo, co
--target
, ale w każdym przypadku działa dla mnie.źródło
Jak wspomniano wcześniej, jest to znany błąd występujący w pip & pythonie zainstalowanym z homebrew.
Jeśli utworzysz
~/.pydistutils.cfg
plik z instrukcją „pusty prefiks”, rozwiąże to problem, ale spowoduje przerwanie normalnych operacji pip.Dopóki ten błąd nie zostanie oficjalnie usunięty, jedną z opcji byłoby utworzenie własnego skryptu bash, który będzie obsługiwał ten przypadek:
Ten skrypt opakowuje twoje polecenie i:
~/.pydistutils.cfg
plik z instrukcją „pusty prefiks”~/.pydistutils.cfg
plikTen skrypt można zmienić i dostosować do swoich potrzeb, ale masz pomysł. I pozwala na wykonywanie poleceń bez hamowania. Mam nadzieję, że to pomoże :)
źródło
Jeśli używasz virtualenv *, dobrym pomysłem może być dwukrotne sprawdzenie,
which pip
czy używasz.Jeśli zauważysz
/usr/local/bin/pip
, że wydostałeś się ze swojego otoczenia. Ponowna aktywacja virtualenv naprawi ten problem:VirtualEnv:
$ source bin/activate
VirtualFish:
$ vf activate [environ]
*: Używam virtualfish, ale zakładam, że ta wskazówka dotyczy obu.
źródło
Mam podobny problem. Używam flagi --system, aby uniknąć błędu, tak jak opisuję tutaj w innym wątku, w którym wyjaśniam konkretny przypadek mojej sytuacji. Publikuję to tutaj, spodziewając się, że może to pomóc każdemu, kto ma ten sam problem.
źródło