Jak używać pip po aktualizacji OS X El Capitan?

115

Po aktualizacji El Capitan nie mogę uruchomić instalacji pip. Błąd, który otrzymuję, jest taki, że „operacja nie jest dozwolona”, gdy pip próbuje utworzyć nowe foldery podczas instalacji.

creating /System/Library/Frameworks/Python.framework/Versions/2.7/share
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted

W zasadzie nie mogę tworzyć folderów itp. W tych folderach. Próbowałem użyć sudo, które nie pomaga. Również zrobiłem

sudo chflags nouchg /System/Library/Frameworks/Python.framework/Versions/2.7/

Powyższe też nie pomogło. Co mogę zrobić, aby ponownie zainstalować biblioteki Pythona?

web_ninja
źródło
1
Gdzie jest pip w twoim systemie?
Mark
$ gdzie pip / usr / local / bin / pip
web_ninja
$ pip --version pip 7.1.2 z /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
web_ninja
Jak zainstalowałeś pip - powinien napisać do /Library/Python/2.7/site-packages not / System
Mark
Nie pamiętam teraz. Pomyślałem, że po opublikowaniu komentarza, który był problemem, i użyłem naparu do zainstalowania pythona i poprawiłem położenie pip.
web_ninja

Odpowiedzi:

84

Szybkie rozwiązanie to użycie homebrew żeby zainstalować python w /usr/local/bin tak, że twój pip może działać na modyfikowanej przez użytkownika strukturze Pythona.

brew install python
pip --version

Wyłączanie ochrony integralności systemu jest również opcją, ale nie polecam tego na nic innego niż profesjonalnie zarządzane i zamurowane serwery, na których masz siłę roboczą do zarządzania wykrywaniem włamań lub jeśli jesteś programistą / administratorem i musisz testować rzeczy z SIP i bez.

ls -lO /System/Library/Frameworks/Python.framework/Versions/2.7/
csrutil status

Zobaczysz, że ograniczony ustawiona jest flaga, której nie można usunąć nawet jako root, gdy włączony jest SIP.

Użycie homebrew umożliwia zarządzanie pip i python oddzielnie niż wersja dostarczona przez system. Dodatkową korzyścią jest to, że framework homebrew został zaprojektowany w celu ułatwienia utrzymania i poprawek / obowiązków poprzez automatyzację.

bmike
źródło
1
Zainstalowany python nie jest stabilny i ulega awarii losowo
jayatubi
@jayatubi Jaki pakiet lub skrypt jest dla Ciebie niestabilny? Czy instalujesz Pythona 2.7.10 z Brew lub Pythona3, który właśnie dostał poważny błąd i nie jest tak kompatybilny wstecz. Możesz wybrać spośród dziesiątek wersji, jeśli wolisz taką, która jest mniej lub bardziej stabilna dla Twoich potrzeb.
bmike
1
Zgodzić się, że brew install python jest najprostszą opcją, chociaż czyszczenie niektórych innych ustawień może być wymagane, jeśli korzystasz z systemu Python przez jakiś czas (np. pliki Pythona należące do roota pod /usr/local/bin i ~/Library/Caches/pip )
RichVel
Pobieranie skompilowanego Pythona .pkg z np. python.org/downloads/release/python-2712 działa dobrze dla mnie na 10.8. Jakieś komentarze do tego kontra homebrew? Dzięki
denis
@denis lubię brew ponieważ łatwo przypiąć odpowiednią wersję - zarządzaj wieloma różnymi wersjami lub regularnie aktualizuj rzeczy. Jeśli masz coś, co działa dla ciebie - trudno się spierać, że powinieneś coś zmienić.
bmike
77

Inną możliwą opcją bez konieczności wyłączania SIP lub instalowania innych wersji Pythona, jest instalacja modułów tylko dla bieżącego użytkownika za pomocą

pip install --user <modulename>

Gdyby to był tylko twój osobisty komputer, byłoby to najprostsze i najbezpieczniejsze rozwiązanie.

Michal Příhoda
źródło
1
Może El Capitan udostępnił / usr / bin / pip, ale macOS Sierra tego nie robi.
sigjuice
1
Działa na sierra
harryparkdotio
56

Ten problem często pojawia się, gdy pip próbuje zainstalować stronę dla IPythona na El Capitan. Szybka poprawka polega na użyciu polecenia pip w następujący sposób:

sudo -H pip install --install-option '--install-data=/usr/local' <package>

Jednak ochrona integralności systemu (SIP) na El Capitan blokuje kilka złych praktyk za pomocą pip, które były używane do przesuwania, więc prawdopodobnie będziesz musiał wprowadzić kilka zmian, aby pip działał płynnie na El Capitan.

SIP na El Capitan przedstawia trzy problemy z użyciem pip z dostarczoną przez Apple wersją Pythona na OS X:

  1. distutils nie ustawia poprawnie dwóch ważnych zmiennych na komputerach Mac, więc pip próbuje pisać nagłówki i inne udostępnione pliki (np. strony podręcznika) pod /System/Library/Frameworks/Python.framework/Versions/2.7/. To zły pomysł, ale we wcześniejszych wersjach OS X udało się, jeśli pip został uruchomiony z sudo. Jednak zawodzi na El Capitan z powodu SIP. To jest błąd, na który wpadłeś. Daje wiadomości takie jak OSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

  2. Apple instaluje nieaktualne wersje niektórych pakietów w /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/ (np. sześć). W poprzednich wersjach OS X, kiedy zainstalowałeś pakiet, który potrzebował nowszej wersji jednego z nich, sudo pip po cichu usunie starą wersję z /System/ folder i zainstaluj nowszą wersję /Library/Python/2.7/site-packages. Był to również zły pomysł i nie jest już możliwy z SIP. Ale teraz pip ulegnie awarii z komunikatem o błędzie podczas próby usunięcia starego pakietu. Ta wiadomość jest również OSError: [Errno: 1], ale przychodzi po takiej wiadomości Uninstalling six-1.4.1:. Zobacz np. https://github.com/pypa/pip/issues/3165 .

  3. Wersja Pythona firmy Apple dodaje kilka katalogów pod /System/Library/Frameworks/Python.framework/Versions/2.7/ do ścieżki wyszukiwania Pythona powyżej standardowe lokalizacje instalacji pakietu dostępne dla użytkownika. Więc jeśli zainstalujesz nowszą wersję pakietu w innym miejscu (np. sudo -H pip install --ignore-installed six ), otrzymasz komunikat, że instalacja się powiodła, ale po uruchomieniu pythona otrzymasz starszą wersję /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/. To także uniemożliwia użycie nowych pakietów, które mają taką samą nazwę jak moduły ze standardowej biblioteki.

Możesz obejść te problemy, ale metoda zależy od odpowiedzi na trzy pytania.

  1. Czy chcesz kontynuować korzystanie z wersji Pythona w systemie Mac OS X lub zainstalować własną? Instalacja własnego jest najbezpieczniejszą opcją i można to zrobić za pomocą oficjalnego instalatora Pythona, Homebrew lub Anaconda. To też jest to Apple zaleca , tak jak wskazany przez @Sacrilicious . Jeśli zainstalujesz własną wersję Pythona, prawdopodobnie powinieneś odinstalować wszystko, co jest aktualnie zainstalowane /Library/Python/2.7/site-packages oraz wszelkie skrypty, które zostały zainstalowane /usr/local/bin dla tych pakietów (w tym pip). W przeciwnym razie będziesz miał irytujące doświadczenie z niektórymi skryptami uzyskującymi dostęp do zainstalowanej w systemie wersji Pythona i niektórych uzyskujących dostęp do własnej instalacji.

Jeśli chcesz trzymać się Pythona zainstalowanego w systemie, musisz podjąć jeszcze dwie decyzje:

  1. Czy chcesz zainstalować pakiety dla wszystkich użytkowników, czy tylko dla siebie? Zainstalowanie dla wszystkich użytkowników zapewnia, że ​​każdy program używający Pythona (włączając w to skrypty administracyjne) będzie miał dostęp do wszystkich instalowanych pakietów. Istnieje jednak odległa szansa, że ​​zakłóci to wykorzystanie Pythona przez El Capitan. (Mam nadzieję, że Apple użyje python -S aby upewnić się, że zawsze otrzymują pakiety, których oczekują, ale nie mam możliwości przetestowania tego.) Instalacja tylko dla własnego konta użytkownika eliminuje możliwość ingerencji w systemową instalację Pythona. Uwaga: jeśli zamierzasz przełączyć się z instalacji na cały system na tylko użytkownika, prawdopodobnie powinieneś skorzystać z okazji, aby odinstalować wszystko, co jest aktualnie zainstalowane w /Library/Python/2.7/site-packages i powiązane skrypty w /usr/local/bin.

  2. Czy chcesz ukryć dodatkowe pakiety instalowane z wersją Pythona systemu OS X? (pod /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/ ) lub zachować je w ścieżce wyszukiwania? Zalecam ich ukrycie, aby najnowsze wersje tych pakietów były automatycznie instalowane w miejscach dostępnych dla użytkownika, gdy zajdzie taka potrzeba. Jeśli nie ukryjesz tego katalogu, od czasu do czasu otrzymasz wiadomości, że pip nie mógł usunąć istniejącego pakietu, aby uaktualnić go do nowszej wersji (wymaganej przez inny instalowany pakiet). W takim przypadku musisz uruchomić pip install --ignore-installed <package>, który zainstaluje nowszą wersję i ukryje wersję zainstalowaną w systemie. Jeśli jednak ukryjesz całość /System/.../Extras/... katalog, utracisz dostęp do niektórych pakietów Apple, które nie są dostępne za pośrednictwem pip, tj. CoreGraphics i bonjour. (Jeśli ich potrzebujesz, możesz uzyskać dostęp poprzez dowiązanie symboliczne do katalogu pakietów-stron).

Oto sposoby obejścia. Byłyby to dobre praktyki we wszystkich wersjach OS X, aby uniknąć przypadkowego zastąpienia lub usunięcia pakietów Pythona używanych przez system operacyjny; jednak są one niezbędne, jeśli chcesz używać pakietów instalowanych przez użytkownika z dostarczoną przez Apple wersją Pythona na OS X El Capitan (10.11).

Zainstaluj pip

Prawdopodobnie już to zrobiłeś, ale jeśli nie, możesz użyć następującej komendy, aby zainstalować pip dla wszystkich użytkowników :

sudo -H easy_install pip
# pip script will be installed in /usr/local/bin

Lub użyj tego polecenia, aby zainstalować pip tylko dla własnego konta użytkownika :

easy_install --user pip
# pip script will be installed in ~/Library/Python/2.7/bin

Zarządzaj udostępnionymi lokalizacjami plików

Jeśli instalujesz pakiety dla wszystkich użytkowników, utwórz plik o nazwie .pydistutils.cfg z tymi liniami (z https://github.com/pypa/pip/issues/426 ):

[install]
install-data=/usr/local
install-headers=/usr/local

Jeśli zazwyczaj używasz sudo -H pip ..., to powinieneś umieścić ten plik w /var/root (katalog domowy dla użytkownika root). Jeśli zazwyczaj używasz sudo pip ..., następnie powinieneś umieścić ten plik w swoim własnym katalogu domowym (~).

Te ustawienia uniemożliwią pipowi pisanie elementów udostępnionych, takich jak nagłówki i strony podręcznika /Library/System. (Polecenie na początku tej odpowiedzi jest szybszą wersją tego samego.) Te ustawienia są potrzebne, ponieważ kod specyficzny dla darwina w /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.py nie ustawia tych zmiennych do lokalizacji zapisywalnych przez roota (chociaż poprawnie ustawia inne zmienne). Więcej informacji na ten temat można znaleźć na stronie https://github.com/pypa/pip/issues/3177 .

Jeśli instalujesz pakiety tylko dla swojego konta użytkownika, elementy udostępnione zostaną automatycznie zainstalowane pod ~/Library/Python/2.7/. Ale powinieneś dodać następujące linie do ~ / .profile, aby udostępnione elementy były znalezione, gdy ich potrzebujesz:

export PATH=~/Library/Python/2.7/bin:$PATH
export MANPATH=~/Library/Python/2.7/share/man:$MANPATH

Uwaga: będziesz musiał uruchomić nową powłokę lub uruchomić ją w wierszu poleceń, aby zmiany odniosły skutek. Możesz także chcieć uruchomić hash -r jeśli niedawno usunąłeś stare skrypty ze ścieżki.

Zarządzaj ścieżką Pythona

Musisz upewnić się, że instalowane pakiety są wyższe w kolejności wyszukiwania Pythona niż pakiety zainstalowane w systemie. Najłatwiej to zrobić za pomocą .pth pliki. To wynika z sugestii Sacrilicious gdzie indziej na tej stronie , ale zapewnia, że ​​katalog użytkownika site-packages jest przeszukiwany przed katalogiem pakietów systemowych dla całego systemu, i oba są przeszukiwane przed standardową biblioteką i katalogiem Apple Extras (oba w katalogu / System / ...). Pomija także /System/.../Extras w razie potrzeby ze ścieżki wyszukiwania.

Utwórz plik o nazwie fix_mac_path.pth, z tekstem poniżej. Jeśli instalujesz pakiety dla wszystkich użytkowników, fix_mac_path.pth należy umieścić w /Library/Python/2.7/site-packages. Jeśli instalujesz tylko dla własnego użytkownika, fix_mac_path.pth powinien być w ~ / Library / Python / 2.7 / lib / python / site-packages. (Ten plik może mieć dowolną nazwę, ale musi być umieszczony w jednej lub obu lokalizacjach i musi kończyć się .pth; również cały tekst w tym pliku musi być w jednym wierszu.)

Jeśli chcesz ukryć zainstalowane w Apple pakiety /System/.../Extras:

Najpierw uruchom jedno z następujących poleceń, aby uzyskać roboczą kopię pip / setuptools niezależnie od wersji dostarczonej przez Apple:

pip install --ignore-installed --user setuptools   # your account only
# or
sudo -H pip install --ignore-installed setuptools  # all users

Następnie wprowadź następujący kod fix_mac_path.pth w miejscu określonym powyżej:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/') and not '/Extras/' in p]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Jeśli chcesz nadal korzystać z pakietów zainstalowanych przez Apple, nie musisz instalować innej kopii narzędzi konfiguracyjnych. Po prostu wprowadź następujący kod fix_mac_path.pth w miejscu określonym powyżej:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/')]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Po tym możesz użyć python -m site aby upewnić się, że kolejność wyszukiwania ścieżek ma sens.

Zainstaluj pakiety

Następnie powinieneś być w stanie zainstalować nowe pakiety za pomocą jednego z następujących poleceń.

Dla wszystkich użytkowników:

sudo -H pip install <package>

Dla własnego użytkownika:

pip install --user <package>
Matthias Fripp
źródło
Bardzo jasne kierunki z opisanymi alternatywami. Przestrzegałem tego przewodnika iz powodzeniem udało mi się ominąć problem z biblioteką „sześć”, co pozwoliło mi zainstalować mitmproxy.
Paul Chernoch
1
To jest naprawdę jedna z najbardziej pouczających, kompletnych i pomocnych odpowiedzi, jakie kiedykolwiek spotkałem na temat stackoverflow. Dobra robota i dzięki.
cmsjr
@cmsjr, dzięki! Zajęło mi trochę czasu, aby dowiedzieć się, co się dzieje, a to daje mi dobre miejsce do odesłania do tego!
Matthias Fripp
3
Zdecydowanie najczystsze i najbardziej kompletne wyjaśnienie, jakie widziałem w tym obszarze, szczególnie oczyszczanie istniejącego systemu bałaganu Pythona - dziękuję! Moim głównym ulepszeniem byłoby zdecydowanie zalecenie używania Pythona zainstalowanego w napędzie, ponieważ jest to bardzo proste i zapewnia czystą instalację, która nie wymaga sudo. Jest to dodatek do wirtualizacji dla projektów rozwojowych.
RichVel
Co za katastrofa. Niech cię Bóg błogosławi.
Matt M.
31

Po pierwsze, nie wyłączasz SIP jako sposobu na rozwiązanie tego problemu. Przepraszamy za to, że tworzenie tego folderu zawodzi, ale musimy go obejść. Po drugie, tracisz wszystkie niuanse, które Apple myślał, że dają ci, jak most przez pyObjC, kiedy instalujesz swój własny Python.
(Przyznam się, Mówią powinieneś zainstalować swój własny /usr/local jeśli jesteś programistą, po prostu sprzeciwić się temu w prosty sposób z naparem.)

Logicznie rzecz biorąc, pomyślałbyś o zainstalowaniu go gdzieś w SIP, który cię nie blokuje, a to prawie na pewno rozwiązuje jakiś problem z zależnością. Powiadamianie pip o tym, gdzie ma być przeprowadzane instalowanie, nie jest rozwiązaniem tak bardzo, jak zignorowanie wcześniej istniejących rzeczy w / System, gdzie sprawdzane są zależności dla wielu typowych instalacji, które wymagają np. six, a SIP powoduje, że pip się łamie, gdy próbuje go zaktualizować. W rzeczywistości jest to domyślne zachowanie pip do instalacji w /Library/Python/2.7/site-packages, wystarczy powiedzieć --ignore-installed aby zmusić go do zainstalowania tam zaktualizowanych wersji zależności.
... Niestety, możesz następnie zaimportować ten moduł w interaktywnej sesji lub skrypcie i uzyskać niezłe fatalne błędy - wciąż patrzysz na niezaktualizowany pakiet / System!

Od wczesnych dni instalacji Python ma sposób na wyraźne sprawdzenie tego wyszukiwania. Wygląda to nieco dziwnie (i powinno wywołać pauzę dla tych z nas, którzy są świadomi bezpieczeństwa i nie są zachwyceni tępością przesuwania go na szczyt listy bez sprawdzania, ale) możesz umieścić plik, który kończy się na .pth (np. „elcap.pth”) w /Library/Python/2.7/site-packages aby przesunąć ten katalog na początek kolejności wyszukiwania o następującej treści:
import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

Rozpocznij nową sesję i szybką wycieczkę do python -m site potwierdzi, że wstawiłeś tę ścieżkę do pierwszego gniazda, a importowanie modułów powinno działać.

Aha, po tym wszystkim spróbuj po prostu zainstalować za pomocą pip --user opcja lub użycie a virtualenv - i tak jest to najlepsza praktyka dla większości ludzi.

Sacrilicious
źródło
1
Teraz jest to elegancki i dobry kontrapunkt dla mojego uproszczonego rozwiązania „porzuć system Python i zaparz go”. Jeśli potrzebujesz szybkiego i brudnego, może to nie być warte wysiłku, ale utrzymanie pyObjC i jednego pytona ma wielką wartość.
bmike
2
Więcej pytonicznych i rozsądnych byłoby zainstalować jako --user lub użyj virtualenv. Jestem po prostu umysłem, administratorem, który instalujesz raz dla systemu i że użytkownik powinien być w stanie nadpisać system. Sprzeciw wobec tego rozwiązania może polegać na tym, że system będzie patrzył na zmienioną ścieżkę, ale istnieje precedens, że easy_install może również zapisać plik .pth.
Sacrilicious
2
Nie wiem, czy sposób parzenia jest łatwy / zły sposób - to kwestia rozwiązywania problemów, a napar rozwiązuje moje problemy tylko spektakularnie - myśląc sam o tym, ile wysiłku zajęłoby granie z nowymi zabawkami (rubin 2.2 .3, python3.5, MongoDB, Node4.2.1) w wygodny sposób, np. Wpisanie polecenia, ponowne skompilowanie, zaktualizowanie i usunięcie thrashu - no cóż, więc wybieram prostą ścieżkę :) Nie wiem, co jest dostarczona wersja Pythona dla systemu OS X jest tak różna od obsługi Cocoa i Threads oraz wielu pakietów, z których nigdy wcześniej nie korzystałem i rzeczywiście skompilowałem stos rzeczy Xcode / Kernel
PJJ
Dodałem elcap.pth do /Library/Python/2.7/site-packages, teraz widzę ścieżkę wymienioną w indeksach 0 i 2 sys.path. Potem spróbowałem sudo pip install --ignore-installed ipython i działa aż do uruchomienia „instalacji setup.py dla pexpect”, w którym punkt pip nadal próbuje uaktualnić coś w /System/Library/Frameworks/Python.framework/Versions/2.7/share, a także błędy.
kojiro
Instalacja virtualenv wymaga użycia pip, więc tak naprawdę nie rozwiązuje żadnych problemów związanych z użyciem pip. Jak to jest, instaluję go z pip --user i virtualenv nadal nie działa.
user5359531
4

Myślę, że to z powodu łyk lub Ochrona integralności systemu , rodzaj ochrony plików w czasie rzeczywistym, która przypomina antywirusa systemu Windows :) i zatrzymuje wszelkie zmiany, które chcesz wprowadzić w folderach systemowych OS X. Apple po prostu postanowił wyłączyć modyfikacje systemu - aby mieć pewność, że jesteś w pełni chroniony przed złem Internetu i innych komputerowych sił zła łyk chroni nas przed.

Jeśli chcesz wyłącz SIP musisz uruchomić Recovery HD, przytrzymując Command + R klawisze jednocześnie podczas uruchamiania komputera Mac.

Otwórz terminal z menu Narzędzia i wpisz csrutil disable, a następnie naciśnij przycisk powrotu. Przejdź do menu Apple, aby ponownie uruchomić komputer.

SIP będzie teraz wyłączony. Wyłączyłem go dawno temu i nie zauważyłem niczego złego, niektóre procesy wydają się narzekać, ale zawsze działają na OS X, więc nie jestem pewien, czy jest to spowodowane brakiem ochrony integralności systemu

Moja rada to całkowite pozbycie się SIP i / lub korzystanie z homebrew dla całego swojego oprogramowania typu opensource / development. Homebrew używa katalogu / usr / local dla swojej instalacji i nie koliduje z innymi komponentami systemu, i homebrew kompilacje są bardziej aktualne niż kompilacja jabłek.

PJJ
źródło
1
Nie ma sensu głosować na tę odpowiedź. Ale może ktoś jest po prostu zepsuty? +1 ode mnie ...
bmike
1
Dzięki stary! Próbowałem dodać trochę humoru, ale nie każdy musi być dostosowany do mojego zrozumienia;)
PJJ
Hmm - po przeczytaniu sacrilicious ” odpowiedź, nie jestem pewien, czy to SIP. Myśli?
bmike
1
Jest to rzeczywiście SIP uniemożliwiające utworzenie folderu (prawdopodobnie dla czegoś takiego jak strona man) jako podkatalogu /System; niedostępne od 10.11. Możemy użyć csrutil do tymczasowego wyłączenia go, jeśli jesteśmy uszczypnięci, chociaż wiem, że może się wydawać, że może się on zmienić w kula, ale to nie wydaje się być dobrym powodem, aby go użyć. Odejście to jest… dlaczego nie możemy mieć miłych rzeczy.
Sacrilicious
Cały czas to rozumiem: statusSystem Integrity Protection status: enabled (Custom Configuration). Configuration: Apple Internal: disabled Kext Signing: disabled Filesystem Protections: disabled Debugging Restrictions: disabled DTrace Restrictions: disabled NVRAM Protections: disabled i nie mam powodu, aby go włączyć, ponieważ mój system jest dość mocno zamknięty i dostosowany
PJJ
4

Używany pip3 install <package> zamiast tego rozwiązałem problem z uprawnieniami w pip.

Keng
źródło
4

Wierz mi, nie chcesz, aby biblioteka zapisywała cokolwiek na tej ścieżce.

Poprzednio nie był zalecany, ale można go zapisać /System/Library/Frameworks/Python.framework/Versions/2.7/ , ale teraz nie jest obsługiwany z powodu Apple SIP, a więc jest to problem właściciela biblioteki. Dystrybucja pakietów powinna zostać zaktualizowana, aby działała poprawnie z tą aktualizacją. Większość pakietów została zaktualizowana i zainstalowała ich zawartość /Library/Python/2.7/site-packages, ale niektóre pakiety nie zostały zaktualizowane.

W moim przypadku była to biblioteka zielonkowa, która próbowała ją napisać .h plik do folderu System Frameworks:

Jak to naprawić: sudo -H pip install greenlet --install-option "--install-headers=/Library/Python/2.7/lib/python/includes/" następnie sudo -H pip install gevent

Dla numpy poprawka jest sudo -H pip install --ignore-installed -U numpy.

W przypadku innych bibliotek poprawki różnią się od https://github.com/pypa/pip/issues/3177 do pip install --ignore-installed six i pip install --user (ostatni instaluje wszystko w /User//Library/Python/2.7/ path). Zobacz także aktualną najlepszą odpowiedź na ten post: https://apple.stackexchange.com/a/210021/169157

Jeśli wpiszesz python -m site powinien zawierać sys.path = [ ... '/Library/Python/2.7/site-packages', ... ] przed ścieżkami systemowymi - dlatego (i jak) działa.

Yuri Baburov
źródło
3

Zrobiłem to w następujący sposób:

brew install python

następnie po zainstalowaniu pythona:

sudo easy_install pip
motionpotion
źródło
3
brew install python już instaluje z nim pip. Jeśli następnie zainstalujesz pip za pomocą easy_install, prawdopodobnie skończysz z dwoma instalacjami pip, które mogą prowadzić do mylących problemów.
NSSynapse
3

Bardzo fajnym rozwiązaniem dla tego problemu jest użycie virtualenv (virtualenvwrapper), po utworzeniu nowego środowiska dla projektu, możesz użyć pip bez problemów, więc użyłem virtualenvwrapper i te dwie linie rozwiązują problem:

mkproject <project_name>
pip install <package_name>
neosergio
źródło
Jak polecasz instalację virtualenv? pip install virtualenv lub czy pip nie działa i musisz się uciekać sudo easy_install +1 za to, co już tu jest. Twoje zdrowie
bmike
1
pip nie działa z powodu odpowiednich uprawnień, więc sudo easy_install Prace
neosergio
2

Mam python3 zainstalowany na moim Mac, podczas gdy oryginalny python2.7 pochodzi z OSX. Więc kiedykolwiek chcę wywołać python3, po prostu wpisz $ python3 .... Może powinieneś spróbować $ python3 get-pip.py, to działa dla mnie, gdy mam prawie taki sam problem z tobą.

dynamitez
źródło
2

streszczenie

Uderzyłem w ten problem w systemie Mac OS X 10.11.6 (który ma SIP), ponieważ zainstalowałem pip przy użyciu systemu easy_install, a lokalny easy-install.pth odnosił się do bibliotek systemowych.
Podczas instalowania kolejnych pakietów za pomocą pip niektóre zależności zostały rozwiązane w starszych bibliotekach System Python.
Rozwiązaniem było usunięcie moich lokalnie zainstalowanych bibliotek i ponowne zainstalowanie lokalnej wersji Pythona (która zawiera pip) https://www.python.org/downloads/ aby system i lokalnie zainstalowane instancje Pythona były oddzielone.
Próbowałem użyć poprawki fix mac path.path w odpowiedz @mfripp jednak znalazłem usunięcie i ponowne zainstalowanie czyszczenia.

Przyczyna

(Nie wykonuj tych kroków)

Uderzyłem w ten problem podczas próby instalacji Ansible. Śledziłem dokumenty Ansible do instalacji na OS X za pomocą pip
Najpierw zainstalowałem pip z sudo easy_install pip
Wykorzystało to system easy_install at /usr/bin/easy_install i zainstalowany pip w /Library/Python/2.7/site-packages/pip
Podczas instalowania pip dostałem ostrzeżenia w następujący sposób, ale zignorowałem je i włączyłem ślepo.

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
  warnings.warn(msg)
warning: no previously-included files found matching '.coveragerc'
...
Adding pip 9.0.1 to easy-install.pth file
Installing pip script to /usr/local/bin
...
Installed /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg
...
Finished processing dependencies for pip

Później patrząc na /Library/Python/2.7/site-packages/easy-install.pthwyglądało to tak

import sys; sys.__plen = len(sys.path)
./pip-9.0.1-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

Następnie zainstalowałem ansible przez pip

sudo pip install ansible

Dostałem wiadomości mówiące, że wymagania zostały już spełnione przez biblioteki systemowe

Requirement already satisfied: setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ansible)  
Requirement already satisfied: six>=1.4.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from cryptography>=1.1->paramiko->ansible)

Potem, gdy uruchomiłem ansible, mam ten problem

VersionConflict: (setuptools 1.1.6 (/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python), Requirement.parse('setuptools>=11.3'))

a sprawdzanie pip wykazało, że paramiko wymaga nowszych narzędzi konfiguracyjnych

pip check paramiko
matplotlib 1.3.1 requires tornado, which is not installed.
matplotlib 1.3.1 requires nose, which is not installed.
cryptography 1.7.2 has requirement setuptools>=11.3, but you have setuptools 1.1.6.

Zauważ, że ansible wymaga tylko setuptools (bez wersji), więc pip zgłosił zależność zadowalającą narzędzia konfiguracji systemu.

Rozwiązanie

Rozwiązałem to, odinstalowując wszystkie lokalne biblioteki Pythona przy użyciu wskazanego procesu https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython
Dla mnie to zaangażowane

sudo rm -rf /Library/Python

Następnie usunąłem dowiązania symboliczne i pliki wykonywalne w / usr / local / bin, na przykład

sudo rm /usr/local/bin/ansible  # executable
sudo rm /usr/local/bin/python*  # symlinks to /Library/Python/2.7
sudo rm /usr/local/bin/easy_install*

i tak dalej. Usunąłem również wszystkie aplikacje

sudo rm -rf /Applications/Python\ 2.7/

Następnie pobrałem pakiet instalacyjny 2.7.13 dla systemu Mac OS X z https://www.python.org/downloads/ i zainstalowałem go.

Zainstalował lokalny python i pip w /Library/Frameworks/Python.framework/Versions/2.7 i dowiązania symboliczne w /usr/local/bin który jest oddzielony od bibliotek systemowych w /System/Library/Frameworks/Python.framework i /usr/bin więc dostaję

which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
which ansible
/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible

i w pip list

setuptools (28.8.0)
six (1.10.0)

ansible teraz działa dla mnie

Jason S
źródło
1

Dla mnie PATH zaginął pip, zostało to potwierdzone przez uruchomienie python -m pip

Dwa potencjalne rozwiązania tutaj, dodaj pip wrócić do PATH. W moim przypadku pip i tak był nieaktualny, więc aktualizacja go naprawiła:

python -m pip install --upgrade pip

✗ pip --version pip 9.0.1 from /Library/Python/2.7/site-packages (python 2.7)

Vinnie James
źródło