OSX El Capitan: sudo pip install OSError: [Errno: 1] Операция не разрешена

Когда я бегу:

sudo pip install ipython

Я получаю следующую ошибку

OSError: [Errno: 1] Операция не разрешена: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

Последняя выполненная команда пытается создать каталог, указанный выше.

Кроме того, следующая команда не может установить iPython без каких-либо ошибок.

sudo pip install --user python

(Я использую Mac OS X El Capitan на случай, если другие пользователи этой ОС увидят ту же проблему.)


person Milad M    schedule 08.10.2015    source источник
comment
Релевантно: Как использовать Pip после обновления El Capitan до Mac OS X   -  person kojiro    schedule 28.02.2016
comment
Я добавил ответ, который объясняет, как изменить ваш $PATH, чтобы вы могли вызывать исполняемые файлы для установленных пакетов --user. stackoverflow.com/a/47102398/117471   -  person Bruno Bronosky    schedule 03.11.2017
comment
Вы не должны использовать sudo с --user. Что делает --user, так это устанавливает в ~/Library, а не в /Library Вам не нужно использовать sudo для установки туда. Но как только вы установите с помощью sudo, все каталоги и файлы будут принадлежать root. Затем вы должны использовать sudo, чтобы сделать с ними что-нибудь еще. Что, в свою очередь, потребует от вас использовать sudo для других вещей, для которых вы не должны его использовать. Тогда даже честная ошибка может перейти от выдачи ошибки к уничтожению данных.   -  person Bruno Bronosky    schedule 03.11.2017


Ответы (12)


Инструкции, сообщающие sudo pip install, по своей сути неверны.

Если есть какой-либо учебник, в котором говорится, что вы должны сделать sudo pip, пожалуйста, отправьте сообщение об ошибке в этом пакете. Автор разучивает сообщество Python, поскольку время показало, что sudo pip не работает.

OSX El Capitan представила механизмы для предотвращения повреждения файлов операционной системы. /System/Library/Frameworks/Python.framework/Versions/2.7/share — одно из охраняемых мест. Обычному пользователю незачем размещать или записывать туда какие-либо файлы. Это связано с тем, что сама операционная система полагается на эти файлы и sudo pip со всей силой, данной выше, безоговорочно перезапишет их. Обычно ничего плохого не случается, но шансы есть. Apple хочет защитить пользователей своих ОС от случайного краха их установки.

Вместо этого вам нужно установить пакет Python, например IPython, локально в домашнюю папку вашего пользователя. Самый простой способ — создать виртуальную среду, активировать ее, а затем запустить pip в виртуальной среде.

Пример:

cd ~  # Go to home directory
virtualenv my-venv
source my-venv/bin/activate
pip install IPython

Больше информации

В качестве альтернативы нужно уметь делать pip install --user. Но опять же, sudo не требуется, и вам нужно вручную настроить переменную среды PATH.

person Mikko Ohtamaa    schedule 08.10.2015
comment
Если виртуальная среда не требуется и вы хотите глобально (например, /Library/Python/2.7/site-packages) установить модули, попробуйте мое решение ниже, используя easy_install stackoverflow.com/a/33463702/3078330 - person smat88dd; 04.11.2015
comment
У вас есть ссылка на эту точку зрения на то, что «sudo pip» — это плохо (поскольку время доказало, что sudo pip — неправильная практика)? Я не вижу никакого обсуждения sudo в цитатах, которые вы даете, и в учебнике первый шаг к созданию virtualenvs указан как «pip install virtualenv», что, похоже, создает циклическую зависимость, пытаясь следовать вашему совету. - person Von; 26.11.2015
comment
@Von: Я могу поискать цитату для тебя, если хочешь. Я разрабатываю Python с 2003 года, поэтому я надеюсь, что пока вы просто поверите мне на слово. - person Mikko Ohtamaa; 26.11.2015
comment
@Von: pip install virtualenv больше не нужен для Python 3.4+, поскольку они поставляются со встроенным эквивалентом python -m venv virtualenv. docs.python.org/3/library/venv.html - person Mikko Ohtamaa; 26.11.2015
comment
@Von: я только что перечитал официальное руководство по Python. Ты прав. Я обновлю его, чтобы он соответствовал полному рабочему процессу, чтобы у него не было проблемы с циркуляцией установки virtualenv в virtualenv. - person Mikko Ohtamaa; 26.11.2015
comment
@MikkoOhtamaa Я не против поверить вам на слово, но это ограничивает объем образования, которое можно сделать. Наличие этого в официальных документах по python будет иметь большое значение для улучшения распространения, я не разработчик, но считаю себя умеренно хорошо осведомленным о python и pip и никогда не слышал об этом до ваших комментариев. Также мне интересно понять проблемы, с которыми люди сталкивались, когда я использовал «sudo pip» для изменения установки системы на некоторое время без заметных проблем (я больше не делаю, но это потому, что я переключился на использование доморощенного, другая история в файле право собственности...). - person Von; 26.11.2015
comment
@Von: станьте свидетелем хаоса и безумия bugs.launchpad .net/ubuntu/+source/python-pip/+bug/1308714/ - person Mikko Ohtamaa; 27.11.2015
comment
При всем уважении, это не относится к первоначальному вопросу. Я пытаюсь установить IPython и сделать его доступным глобально (для всех пользователей на моей машине), и ни virtualenv, ни pip install --user IPython не помогают в этом. Более того, pip install --user IPython не может поместить команду ipython в $PATH (по крайней мере, на моей машине). - person jpetazzo; 28.02.2016
comment
@jpetazzo: Есть ли какая-то конкретная проблема с более подробной информацией? Ваш вопрос, как разместить IPython на пути? Обычно это соответствует обычному рабочему процессу виртуальной среды, когда активация виртуальной среды автоматически обновляет ваш PATH: packaging.python.org/en/latest/installing/ - person Mikko Ohtamaa; 28.02.2016
comment
pip install --ignore-installed --user jupyter работает для моей установки iPython. sudo pip нет. - person Sophia Feng; 13.04.2016
comment
@jpetazzo это сработало для меня: `export PATH=$PATH:~/Library/Python/2.7/bin` - person Chet; 16.06.2016
comment
Я получал ту же ошибку, используя pip для установки списка зависимостей из txt-файла, и использовал sudo. Я перестал использовать sudo и все заработало! Отличный ответ. - person jeffery_the_wind; 16.09.2016
comment
Вы научили меня, а также сэкономили мое время. Большое спасибо, я перестал использовать sudo, и все заработало! Отличный ответ. - person Parth Gupta; 19.10.2016
comment
Но все еще нужен sudo pip для установки virtualenv, верно? - person ZZ Shao; 07.02.2017
comment
Вы не можете ничего установить с помощью sudo. Я предлагаю вам установить стороннюю, обновленную версию Python 3 от Homebrew, которая поставляется со встроенной виртуальной средой. Кроме того, вы можете установить virtualenv локально в свой домашний каталог с помощью скрипта начальной загрузки. - person Mikko Ohtamaa; 08.02.2017
comment
@MikkoOhtamaa Как Python 3, установленный для одной учетной записи пользователя через Homebrew, будет доступен для всех других учетных записей пользователей, существующих в настоящее время и в дальнейшем созданных на том же компьютере? - person Damian Yerrick; 21.07.2017
comment
@DamianYerrick Я не эксперт HomeBrew, поэтому не могу ответить на этот вопрос. Я предлагаю вам найти ответ на конкретном форуме HomeBrew или открыть новый вопрос. - person Mikko Ohtamaa; 04.08.2017
comment
Я добавил ответ, который объясняет, как изменить ваш $PATH, чтобы вы могли вызывать исполняемые файлы для установленных пакетов --user. stackoverflow.com/a/47102398/117471 - person Bruno Bronosky; 03.11.2017
comment
Лучший ответ, просто не дайте вам решение, а объясните, почему вы столкнулись с этой проблемой. Пальцы вверх. - person Napster_X; 14.09.2018
comment
@jpetazzo Поскольку никто еще не дал вам удовлетворительной причины, причина не sudo pip install <anything> заключается в том, что вы можете легко испортить системную среду Python (например, обновив некоторую версию до версии, несовместимой с другими важными системными службами или демонами). Сама ОС использует Python, а директория site-packages ОС предназначена только для ОС! Если вам необходимо установить библиотеки или приложения для всей системы (для всех пользователей), лучший способ сделать это — использовать диспетчер пакетов, поддерживаемый в системе (например, yum, apt-get или возможно< /i> brew), поскольку все эти версии должны быть совместимы. - person wim; 13.08.2019
comment
В качестве обновления Apple планирует удалить Python и другие языки сценариев UNIX из ОС, начиная с macOS Catalina разработчика. apple.com/documentation/macos_release_notes/ - person Mikko Ohtamaa; 13.08.2019

У меня были те же проблемы, но использование easy_install "module" решило проблему для меня.

Я не уверен, почему, но pip и easy_install используют разные места установки, а easy_install выбрал правильные.

Редактировать: без перепроверки, но из-за комментариев; кажется, что разные (установленные OSX и brew) установки мешают друг другу, поэтому упомянутые инструменты действительно указывают на разные места (поскольку они принадлежат разным установкам). Я понимаю, что обычно эти инструменты из одной установки указывают на одну и ту же папку.

person smat88dd    schedule 01.11.2015
comment
У вас установлено два разных интерпретатора Python, а easy_install настроен для другого? - person Mikko Ohtamaa; 05.11.2015
comment
У меня установлено 2-3 разные версии Python, но у меня есть easy_install для всех: easy_install-2.6, easy_install-2.7, easy_install-3.5 - person smat88dd; 05.11.2015
comment
Скорее всего, pip и easy_install указывают на разные Python. Вы можете выяснить это с помощью команды which UNIX, а затем определить правильную команду pip для использования. - person Mikko Ohtamaa; 06.11.2015
comment
У меня каждая версия python установлена ​​только один раз (это python 2.6 и 2.7, предварительно установленные Apple, и python 3.5 с доморощенным). /usr/local/bin/pip install nose указывает на python 2.7 и у меня не получилось с ошибкой, но /usr/bin/easy_install-2.7 nose, который также указывает на py2.7, у меня сработал. - person smat88dd; 06.11.2015
comment
/usr/local/bin/pip -V pip 7.1.2 from /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7) и /usr/bin/easy_install-2.7 --version setuptools 1.1.6. Я сам заметил другой путь (один раз usr/bin и один раз usr/local/bin), но не знаю, почему это так. - person smat88dd; 06.11.2015
comment
/usr/bin - это OSX Apple, поставляемая для всей системы, которую вы не можете писать. /usr/local/bin, скорее всего, установлен Homebrew, что вам как разработчику нужно. - person Mikko Ohtamaa; 06.11.2015
comment
Я думал о том же, но: pwd /System/Library/Frameworks/Python.framework/Versions -> 2.6, 2.7, что означает, что они оба действительно предоставлены Apple, поскольку /System защищена OSX SIP, в которую нельзя также писать. Пожалуйста, поверьте мне, python 2.6 и 2.7, похоже, предустановлены Apple. - person smat88dd; 06.11.2015
comment
Может ли быть предварительная установка из старой OSX перед обновлением? - person Mikko Ohtamaa; 06.11.2015
comment
Ха-ха, ладно, может быть? Я сделал обновление, и когда El Capitan Upgrade/SIP не полностью перезаписал каталог /System, возможно, это было раньше. Другой вопрос: у вас есть Mac с El Capitan? У вас установлен только Python 2.7? - person smat88dd; 07.11.2015
comment
pip и easy_install используют разные места установки — нет, они используют одни и те же места. Это сработало случайно, как @MikkoOhtamaa пытался показать вам в своих комментариях. Это явно не ответ. - person Piotr Dobrogost; 09.04.2017
comment
Они указывали на разные местоположения, возможно, из-за разных установок. Я понимаю, что обычно эти инструменты из одной установки указывают на одно и то же место, но иногда что-то выходит из строя, верно? Как видите, этот ответ помог людям, возможно, в такой же ситуации, так в чем ваша проблема? - person smat88dd; 11.04.2017
comment
Это сработало и для меня после первого сбоя с sudo pip install --ignore-installed ipython (сбой с общим msg). Я предполагаю, что easy_install нашел частично установленный ipython и спас его. - person BjornW; 20.03.2018

Вы должны переустановить Python:

brew reinstall python

Чтобы получить варку, перейдите на домашнюю страницу варева.

person david euler    schedule 20.11.2015
comment
Я второй. я запускаю brew install python, тогда я думаю, что pip уже на месте. После этого pip установка заработала (у меня были похожие проблемы с разрешениями и отказом от установки при установке) - person travelingbones; 27.05.2017

pip install --ignore-installed six

Это сделает работу, затем вы можете попробовать свою первую команду.

Через http://github.com/pypa/pip/issues/3165.

person Alireza Samar    schedule 10.07.2016
comment
В моем случае мне также пришлось сделать pip install --ignore-installed setuptools. - person ithos67; 12.01.2017
comment
Нет, это не сработает из-за отсутствия разрешений. - person Piotr Dobrogost; 08.04.2017

Вместо этого использовал pip3 install <package> и решил проблему с правами доступа с помощью pip.

person Keng    schedule 29.10.2015
comment
К вашему сведению, это сработало, потому что pip3 использует Python 3, который обычно устанавливается пользователем. Python 2 (2.7), с другой стороны, поставляется с macOS и защищен, как объясняет ответ с самым высоким рейтингом. - person Khanh Nguyen; 08.01.2017

TL;DR $PATH исправление

  1. Используйте pip install --user package_name для установки пакета, который должен включать исполняемые файлы CLI.
  2. Запустите оболочку Python и import package_name
  3. Найдите, где в выводе встречается lib/python/..., и замените все на bin.
  4. Скорее всего, $HOME/Library/Python/2.7/bin

Подробности

Из-за новой защиты целостности системы в macOS 10.11 El Capitan вы больше не можете sudo pip install. Мы не будем обсуждать достоинства этого здесь.

Другой ответ объясняет, что вы должны pip install --user, что правильно. Но они отправили вас в закоулки, чтобы выяснить, что делать с вашим $PATH, чтобы вы могли получить доступ к установленным исполняемым файлам. К счастью, я уже решил подобную потребность в несвязанном вопросе.

Вот расшифровка того, как я решил проблему на одной из своих систем. Я включаю все это, а не только $PATH, которое сработало для меня, потому что ваша система может отличаться от моей. Этот процесс должен работать для всех.

$ pip install --user jp
Collecting jp
  Downloading jp-0.2.4.tar.gz
Installing collected packages: jp
  Running setup.py install for jp ... done
Successfully installed jp-0.2.4

$ python -c 'import jp; print jp'
<module 'jp' from '/Users/bbronosky/Library/Python/2.7/lib/python/site-packages/jp/__init__.pyc'>

$ find /Users/bbronosky/Library/Python -type f -perm -100
/Users/bbronosky/Library/Python/2.7/bin/jp

$ which jp

$ echo -e '\n''export PATH=$HOME/Library/Python/2.7/bin:$PATH' >> ~/.bashrc

$ bash # starting a new bash process for demo, but you should open a new terminal

$ which jp
/Users/bbronosky/Library/Python/2.7/bin/jp

$ jp
usage: jp <expression> <filepath>
person Bruno Bronosky    schedule 03.11.2017

Та же ошибка

Installing collected packages: six, pyparsing, packaging, appdirs, setuptools
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 784, in install
    **kwargs
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 851, in install
    self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 1064, in move_wheel_files
    isolated=self.isolated,
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 345, in move_wheel_files
    clobber(source, lib_dir, True)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 323, in clobber
    shutil.copyfile(srcfile, destfile)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 83, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/six.py'

и здесь я использую --user без sudo для решения этой проблемы

$ pip install --user scikit-image h5py keras pygame
Collecting scikit-image
  Downloading http://mirrors.aliyun.com/pypi/packages/65/69/27a1d55ce8f77c8ac757938707105b1070ff4f2ae47d2dc99461bfae4491/scikit_image-0.13.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (28.1MB)
    100% |████████████████████████████████| 28.1MB 380kB/s
Collecting h5py
  Downloading http://mirrors.aliyun.com/pypi/packages/b7/cc/1c29b0815b12de2c92b5323cad60f724ac8f0e39d0166d0b9dfacbcb70dd/h5py-2.7.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.5MB)
    100% |████████████████████████████████| 4.5MB 503kB/s
Requirement already satisfied: keras in /Library/Python/2.7/site-packages
Requirement already satisfied: pygame in /Library/Python/2.7/site-packages
Requirement already satisfied: matplotlib>=1.3.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from scikit-image)
Requirement already satisfied: six>=1.7.3 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: pillow>=2.1.0 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: networkx>=1.8 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: PyWavelets>=0.4.0 in /Library/Python/2.7/site-packages (from scikit-image)
Collecting scipy>=0.17.0 (from scikit-image)
  Downloading http://mirrors.aliyun.com/pypi/packages/72/eb/d398b9f63ee936575edc62520477d6c2353ed013bacd656bd0c8bc1d0fa7/scipy-0.19.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (16.2MB)
    100% |████████████████████████████████| 16.2MB 990kB/s
Requirement already satisfied: numpy>=1.7 in /Library/Python/2.7/site-packages (from h5py)
Requirement already satisfied: theano in /Library/Python/2.7/site-packages (from keras)
Requirement already satisfied: pyyaml in /Library/Python/2.7/site-packages (from keras)
Requirement already satisfied: python-dateutil in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: tornado in /Library/Python/2.7/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: pyparsing>=1.5.6 in /Users/qiuwei/Library/Python/2.7/lib/python/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: nose in /Library/Python/2.7/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: olefile in /Library/Python/2.7/site-packages (from pillow>=2.1.0->scikit-image)
Requirement already satisfied: decorator>=3.4.0 in /Library/Python/2.7/site-packages (from networkx>=1.8->scikit-image)
Requirement already satisfied: singledispatch in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: certifi in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: backports_abc>=0.4 in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Installing collected packages: scipy, scikit-image, h5py
Successfully installed h5py-2.7.0 scikit-image-0.13.0 scipy-0.19.0 

Надеюсь, это поможет кому-то, кто сталкивается с подобной проблемой!

person GoingMyWay    schedule 20.04.2017
comment
Вы не должны использовать sudo с --user. Что делает --user, так это устанавливает в ~/Library, а не в /Library Вам не нужно использовать sudo для установки туда. Но как только вы установите с помощью sudo, все каталоги и файлы будут принадлежать root. Затем вы должны использовать sudo, чтобы сделать с ними что-нибудь еще. Что, в свою очередь, потребует от вас использовать sudo для других вещей, для которых вы не должны его использовать. Тогда даже честная ошибка может перейти от выдачи ошибки к уничтожению данных. - person Bruno Bronosky; 03.11.2017

У меня были те же проблемы. Как уже упоминалось, не запускайте pip install с помощью sudo. Бежать

brew doctor 

и исправьте предупреждения, и вы сможете продолжить установку pip.

person apadana    schedule 13.02.2016

Трудно заставить pip работать на El Capitan по нескольким причинам:

  1. OS X неправильно устанавливает некоторые переменные distutils, поэтому pip пытается установить вспомогательные файлы в местах под /System/Library/. El Capitan блокирует это, и это ошибка, с которой вы сталкиваетесь.
  2. OS X включает ряд устаревших пакетов под /System/Library/. pip часто хочет обновить их, но не может на El Capitan.
  3. OS X помещает /System/Library/ выше в порядке поиска python, чем /Library/Python/2.7/site-packages (общесистемное расположение пакета python), поэтому, даже если вам удастся установить более новые версии некоторых пакетов, старые все равно будут загружаться, нарушая некоторые зависимости.

Для всех этих проблем есть обходные пути по адресу https://apple.stackexchange.com/a/223163/143849 . Но вам может быть лучше установить свою собственную версию Python через стандартный установщик Python, Homebrew или Anaconda.

person Matthias Fripp    schedule 28.02.2016

Я думаю, у вас есть конфликт с другим пакетом. Для меня это было six. Итак, вам нужно использовать такую ​​​​команду:

pip install google-api-python-client --upgrade --ignore-installed six

or

pip install --ignore-installed six

person Ruhul Amin    schedule 17.05.2016
comment
Какую часть ответа, данного @MikkoOhtamaa, вы не понимаете, что вы по-прежнему предлагаете использовать sudo с pip? - person Piotr Dobrogost; 08.04.2017
comment
@PiotrDobrogost, почему бы тебе не прочитать как следует, прежде чем спрашивать. Мой ответ касается six. - person Ruhul Amin; 09.04.2017
comment
Опять же, какую часть ответа, данного @MikkoOhtamaa, вы не понимаете, что вы все еще предлагаете использовать sudo с pip? - person Piotr Dobrogost; 09.04.2017

У меня установлен python2.7 через brew, и следующее решило мою проблему

варить установить numpy

Он устанавливает python3, но все еще работает и настраивает его для 2.7.

person Aerodyno    schedule 04.10.2017
comment
Работал безупречно. Спасибо!! - person NightFury; 20.11.2017

Я полностью согласен с Микко, но если вы все же хотите это сделать, вот способ:

  • Перезагрузитесь в режиме восстановления (удерживайте cmd + R)
  • Открыть терминал из утилит
  • Используйте команду csrutil disable
person gilliM    schedule 20.10.2015
comment
Это может быть опасным советом без объяснения последствий отключения защиты целостности системы. Одним из соображений является ожидание того, что он больше никогда не будет работать должным образом, если вы не включите его относительно быстро, как в Windows UAC и виртуализации. - person andy magoon; 27.03.2016