Zacząłem używać mojego Maca do instalowania pakietów Pythona w taki sam sposób, jak robię to na moim komputerze z Windows w pracy; jednak na moim komputerze Mac często spotykałem się z błędami odmowy uprawnień podczas zapisywania do plików dziennika lub pakietów witryn.
Dlatego pomyślałem o uruchomieniu pip install <package>
pod, sudo
ale czy jest to bezpieczne / dopuszczalne użycie sudo, biorąc pod uwagę, że chcę tylko zainstalować to na moim obecnym koncie użytkownika?
Przykład śledzenia zwrotnego z błędu wejścia / wyjścia pliku dziennika:
Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
File "/usr/local/bin/pip", line 8, in <module>
load_entry_point('pip==1.1', 'console_scripts', 'pip')()
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
return command.main(args[1:], options)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
log_fp = open_logfile(log_fn, 'w')
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'
Aktualizacja
Najprawdopodobniej wynikało to z uprawnień, jednak najlepszym podejściem jest użycie środowisk wirtualnych w projektach Pythona. sudo pip
Należy unikać biegania, chyba że jest to absolutnie konieczne.
cd /tmp; sudo pip install foo
” to odpowiednie obejście.Odpowiedzi:
Użyj środowiska wirtualnego :
Używasz
sudo
uprawnień lub podwyższonych tylko wtedy, gdy chcesz zainstalować rzeczy do globalnej instalacji Pythona dla całego systemu.Najlepiej jest używać środowiska wirtualnego, które izoluje pakiety za Ciebie. W ten sposób możesz bawić się bez zanieczyszczania globalnej instalacji Pythona.
Jako bonus, virtualenv nie potrzebuje podwyższonych uprawnień.
źródło
sudo pip install
. Powiedzmy, że muszę zainstalować pakiet, którego będę używać w wielu projektach lub na poziomie systemu. Na przykład niektóre narzędzia CLI, takie jakpgcli
. Oczywiście nie potrzebuję do tego wirtualnego środowiska, chcę go zainstalować globalnie. Powinienem użyć,sudo pip install
czy jest kilka poprawnych praktyk? Oto jest pytanie.To nie jest bezpieczne i nie jest mile widziane - zobacz Jakie jest ryzyko związane z uruchomieniem „sudo pip”? Aby zainstalować pakiet Pythona w swoim katalogu domowym, nie potrzebujesz uprawnień roota. Widzieć opis z
--user
możliwością pip.źródło
sudo pip install
znałem szkód wynikających z jego używania. Jak mogę cofnąć to polecenie lub blokowanie, aby uruchomićsudo
?Pierwotnym problemem jest to, że pip nie może zapisywać dzienników w folderze.
Musisz przejść do folderu, w którym wywołany proces może pisać w
/tmp
ten sposób,cd /tmp
a ponowne wywołanie polecenia prawdopodobnie zadziała, ale nie jest tym, czego chcesz.ALE w tym konkretnym przypadku (nie chcesz używać
sudo
do instalowania pakietów Pythona) i nie ma potrzeby instalowania pakietów globalnych, możesz użyć tej--user
flagi:i będzie działać dobrze.
Zakładam, że masz instalację Pythona dla jednego użytkownika i nie chcesz zawracać sobie głowy czytaniem o virtualenv (który nie jest zbyt przyjazny dla użytkownika) lub pipenv .
Jak zauważyli niektórzy w sekcji komentarzy, następne podejście nie jest dobrym pomysłem, chyba że nie wiesz, co robić i utkniesz:
Inne podejście do pakietów globalnych, takie jak w twoim przypadku, które chcesz zrobić:
lub bardziej ogólnie
źródło
--user
Rozwiązaniem dla pip dano w postaci roztworu w mojej odpowiedzi, które już istniały, gdy pisał swoje.--user
pomaga mi!site-packages
katalogu systemu w Pythonie jest podobna do „naprawiania” pompy przez walenie w nią kluczem. Jest chroniony nie bez powodu - nie powinieneś tam instalować żadnych rzeczy . Prawdziwym rozwiązaniem jest, aby nie mieszać systemu dystrybucji Python z programowaniem z dnia na dzień. Zainstaluj inną dystrybucję Pythona (z Python.org, Homebrew, Canopy itp.).Ponieważ miałem ten sam problem, chcę podkreślić, że tak naprawdę pierwszy komentarz Briana Caina to rozwiązanie problemu „IOError: [Errno 13]” - problem:
Jeśli zostanie wykonany w katalogu tymczasowym (
cd /tmp
), błąd IOError nie będzie się już pojawiał, jeśli uruchomięsudo pip install foo
.źródło
sudo pip
tego "rozwiązania" i tym samym instalujesz pakiety z uprawnieniami roota, co prawdopodobnie nie jest tym, czego chcesz?/tmp
, działa, ponieważ każdy ma tam dostęp do zapisu.virtualenvwrapper
Po pomyślnym zainstalowaniu miałem problem z instalacjąvirtualenv
.Mój terminal narzekał po tym, jak to zrobiłem:
Więc bezskutecznie próbowałem tego
(NIE ZALECANE):Potem ja pomyślnie zainstalowałem go za pomocą tego:
źródło
Wygląda na to, że Twoje uprawnienia są pomieszane. Wpisz
chown -R markwalker ~
terminal i spróbujpip
ponownie? Daj mi znać, jeśli zostaniesz przydzielony.źródło
chown
udostępniaOperation not permitted
wiele ukrytych katalogów, takich jak.shsh
& Zakładam, że pracuje z plikami, które może teraz ustawić, ale zobaczę, co się stanie, gdy powróci zachęta CLI.