pip nie działa na instalacji hombrew python 2.7

15

Zainstalowałem Pythona używając Homebrew i nie mogę wywoływać PIP z bash. Próbowałem zmienić mój plik .bash_profile, aby zawierał / usr / local / bin / python i / usr local / share / python, ale bezskutecznie.

Kiedy używam polecenia bash:

find / -name 'pip'

Jedyne wyniki, które otrzymuję to:

/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg/pip
/Users/Ivan/Library/Caches/pip
/Users/Ivan/Library/Logs/pip
/usr/local/Cellar/python/2.7.9/libexec/pip
/usr/local/Cellar/python/2.7.9/libexec/pip/pip
/usr/local/lib/python2.7/site-packages/pip

Żaden z nich nie jest plikiem wykonywalnym.

Naprawdę nie wiem, gdzie wskazać moją $ PATH, ponieważ nie mogę znaleźć pliku wykonywalnego pip. Kiedy otworzę

/usr/local/lib/python2.7/site-packages/pip

lub

/usr/local/Cellar/python/2.7.9/libexec/pip/pip

Znajduję następujące pliki:

__init__.py         commands            operations
__init__.pyc        compat              pep425tags.py
__main__.py         download.py         pep425tags.pyc
__main__.pyc        download.pyc        req
_vendor             exceptions.py       status_codes.py
basecommand.py      exceptions.pyc      status_codes.pyc
basecommand.pyc     index.py            utils
baseparser.py       index.pyc           vcs
baseparser.pyc      locations.py        wheel.py
cmdoptions.py       locations.pyc       wheel.pyc
cmdoptions.pyc      models

Żaden z nich nie jest plikiem wykonywalnym.

Byłbym wdzięczny za pomoc każdego, kto ma większe doświadczenie niż ja.

Edycja: Próbowałem kroki sugerowane przez Marco:

Oto wyniki kroków:

  1. echo $ PATH pokazuje kilka katalogów: / usr / local / bin: / usr / local / mysql / bin: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / texbin: / opt / X11 / bin: / usr / local / mysql / bin

  2. która -a zwraca python: / usr / local / bin / python / usr / local / bin / python

nic nie jest zwracane za co - pip

  1. który python zwraca: / usr / local / bin / python

nic nie jest zwracane dla którego pip

  1. ls -l $ (który python) zwraca pojedynczy katalog: lrwxr-xr-x 1 Ivan admin 33 17 maja 08:59 / usr / local / bin / python -> ../Cellar/python/2.7.9/bin/ pyton

ls -l $ (który pip) zwraca kilka, w tym pliki python, które pokazałem w moim oryginalnym poście

YoungPadawan
źródło

Odpowiedzi:

19

Generalnie, homebrewzainstaluje formulasię /usr/local/Cellar/formulai następnie umieścić link na /usr/local/bin/formula.

Aby skorzystać z zainstalowanych formuł, upewnij się, że /usr/local/binjest w twoim $PATH. Pokaż $PATH, pisząc

echo $PATH

Jeśli /usr/local/binnie ma go $PATH, umieść ten wiersz na końcu ~/.profilepliku.

export PATH="/usr/local/bin:$PATH"

Teraz sprawdź, co pythonsmożna znaleźć w OSX, wpisując:

which -a python

Powinien być znaleziony jeden python /usr/bin/(python Apple) i jeden, przy /usr/local/bin/którym jest python Homebrew.

which python

pokaże ci, który python znajduje się pierwszy w twoim $PATH i zostanie wykonany po wywołaniu python.

Jeśli chcesz wiedzieć, gdzie jest plik wykonywalny, pokaż go, pisząc

ls -l $(which python)

Może to wyglądać następująco: lrwxr-xr-x 1 root root 68 7 Mai 13:22 python -> / usr / local / bin / python

To też zadziała pip.

Jeśli pokażesz wyniki tych kroków, prawdopodobnie możemy Ci pomóc znacznie łatwiej.

-- AKTUALIZACJA --

Masz /usr/local/bin/pythonzwiązana /usr/local/Cellar/python/2.7.9/bin/python. -> brew install pythonpracował.

pokaż, jeśli pipjest zainstalowany przez wpisanie

brew list python | grep pip

Powinieneś zobaczyć

/usr/local/Cellar/python/2.7.9/bin/pip

Jeśli nie, sprawdź, czy istnieją linki, które nie są zrobione brew install. Powiedziałem ci coś takiego:

"Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local"

Aby wymusić łącze i zastąpić wszystkie pliki w konflikcie:

brew link --overwrite python

Aby wyświetlić listę wszystkich plików, które zostaną usunięte:

brew link --overwrite --dry-run python

** BEZ standardowego Apple /usr/bin/python**

link z /usr/local/Cellar/python/2.7.9/bin/pythondo/usr/bin/python

ln -s /usr/local/Cellar/python/2.7.9/bin/python /usr/bin/python

Jest to konieczne dla wszystkich skryptów Python zaczynających się od #!/usr/bin/python. Szczególnie easy_installsię nie powiedzie, jeśli nie ma tam linku.

Teraz możesz biegać

easy_install pip

Mam nadzieję, że robisz postępy

Marco M. von Hagen
źródło
Marco, dziękuję za odpowiedź! Proszę zobaczyć moje oryginalne pytanie o wyniki do kroków - dodałem je w
YoungPadawan
@YoungPadawan wygląda na to, że nie masz standardu Apple /usr/bin/python. To nie jest dobre, ponieważ zaczyna się wiele skryptów Python #!/usr/bin/python. Jeśli nie ma Pythona, pojawia się komunikat o błędzie podobny do twojego. Służy brew link --dry-run pythondo sprawdzania, co zostanie zmienione w linkach podczas korzystania brew link --overwrite python. Uruchomimy twój pip ;-)
Marco M. von Hagen
użyj, brew link --overwrite --dry-run pythonaby zobaczyć, które pliki zostaną zastąpione.
Marco M. von Hagen
1
Zaznaczyłem twoją odpowiedź, ponieważ poprowadziła mnie właściwą ścieżką, ale ostatecznie była to kwestia pozwolenia. Po zainstalowaniu dostałem Warning: The post-install step did not complete successfully You can try again using brew postinstall python. I tried the polecenie brew postinstall python` i doprowadziło mnie to do kilku plików, do których nie miałem dostępu, do których się odrzuciłem. Teraz mogę używać pipa!
Jeszcze
1
W moim przypadku problem był The post-install step did not complete successfullyspowodowany error: could not delete '/usr/local/lib/python2.7/site-packages/pip/__init__.py': Permission denied. Ręcznie usunięto ten plik, a następnie uruchomiono go brew postinstall pythonponownie.
David Pursehouse,
5

Jeśli brew zarządza instalacją Pythona, a pip nie jest już symlinkowany (tzn. Wpisujesz „which pip” i nie otrzymujesz żadnych wyników), wypróbuj to z katalogu domowego:

brew unlink python && brew link python

Nie jestem pewien, czy stara metoda już działa (nie działała na moim komputerze).

Teraz potwierdź, że rzeczywiście wskazuje na twoją instalację w wersji 2.7 pip --version(wyświetli główną wersję Pythona w danych wyjściowych katalogu).

GrayedFox
źródło
4

Naprawdę nie jest to odpowiedź na pierwotne pytanie, ale jeśli ktoś tu skończy, ponieważ jego Homebrew python/pipnie działa (tj. pythonWskazuje na python systemowy i pipnie został znaleziony), przyczyną może być niedawna (lato 2017 r.) Zmiana w sposób, w jaki Homebrew instaluje i łączy Pythona.

Rozwiązaniem jest dodanie następujących elementów ~/.bash_profilei / lub ~/.zshrc:

export PATH="$(brew --prefix)/opt/python/libexec/bin:$PATH"

Spowoduje to pythonwskazanie na naparową wersję Pythona, a także da ci pip. Aby uzyskać więcej informacji, zobacz sekcję zastrzeżeń pod brew info pythoni https://github.com/Homebrew/homebrew-core/issues/15746

bjorgvin
źródło
2

Domyślnie Homebrew zapewnia pip poprzez: brew install python. Jednak wtedy będziesz mieć dwa Pythony zainstalowane na komputerze Mac, możesz też zainstalować je za pomocą:

sudo easy_install pip

Aby sprawdzić, które pliki są zainstalowane z pakietem Python, spróbuj:

$ brew list python
/usr/local/Cellar/python/2.7.9/bin/pip
/usr/local/Cellar/python/2.7.9/bin/pip2
/usr/local/Cellar/python/2.7.9/bin/pip2.7
...

który powinien składać się pip.

Po instalacji powinieneś symlinkować zainstalowane pliki formuły przez:

brew link python

które powinny stworzyć odpowiednie dowiązania symboliczne (takie jak /usr/local/bin/pipwskazywanie na twoje Cellar/python/2.?.?/bin/pip)

Jeśli masz problem z uprawnieniami, możesz to naprawić:

sudo chgrp -R admin /usr/local /Library/Caches/Homebrew
sudo chmod -R g+w /usr/local /Library/Caches/Homebrew

i upewnij się, że użytkownik jest w grupie administracyjnej ( id -Gn $USER).

Po ustaleniu uprawnień nie używaj sudoprzy użyciu brewpolecenia.

Następnie połącz go ponownie:

brew unlink python && brew link python

Aby przetestować uruchamianie na sucho, odłącz i uruchom: brew link -n pythonaby wyświetlić łącza do plików, które brewmogłyby się połączyć.

Po pomyślnym połączeniu upewnij się, że zmienna systemowa PATH ma /usr/local, jeśli nie, dodaj:

export PATH=/usr/local/sbin:/usr/local/bin:$PATH

do twojego ~/.bashrcpliku.

Jeśli się powiedzie, pippowinieneś teraz pracować.

kenorb
źródło
Dzięki za odpowiedź kenorb! Częścią problemu jest to, że easy_install też nie działa dla mnie. W bashu dostaję: -bash: / usr / bin / easy_install: / usr / bin / python: zły interpreter: Brak takiego pliku lub katalogu
YoungPadawan
Oznacza to, że nie masz /usr/bin/pythonzainstalowanego (co zwykle powinno być dostarczane z OS X). Spróbuj więc zgodnie z sugestią, czyli: brew install python && brew link pythona następnie dodaj /usr/local/bindo swojego PATH.
kenorb
Nie wydaje mi się, żeby brew install python && brew link pythonwstawiał Pythona /usr/bin. Widzę to usr/local/bin, ale nie widzę dowiązania symbolicznego do pip. Odłączyłem i powiązałem również pytona i nic się nie zmienia. Wygląda na to, że instalacja i link do browaru nie układają rzeczy we
właściwy sposób
@YoungPadawan brewnic nie robi /usr/bin, ale /usr/local/bin. Spróbuj: brew unlink pythoni uruchom na sucho: brew link -n pythonaby wyświetlić listę wszystkich plików, które powinny być połączone, i sprawdź, czy pipsą dostępne. Jeśli tak, uruchom ponownie bez -n.
kenorb
Dzięki Kenorb, znalazłem rozwiązanie. Ostatecznie była to wadliwa instalacja z powodu uprawnień. Zmodyfikowałem uprawnienia do kilku plików, z którymi Brew był w konflikcie, i ponownie uruchomiłem instalację, a teraz wszystko działa dobrze. Więcej informacji znajduje się w komentarzu do powyższego pytania. Jeszcze raz dziękuję za odpowiedź, bardzo pomogło mi to doprowadzić do rozwiązania.
YoungPadawan,