OSX El Capitan: встановити sudo pip OSError: [Errno: 1] Операція заборонена


127

Коли я бігаю:

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, якщо інші люди в цій ОС бачать ту саму проблему.)



Я додав відповідь, яка пояснює, як змінити ваш, $PATHщоб ви могли викликати виконувані файли встановлених пакетів --user. stackoverflow.com/a/47102398/117471
Бруно Bronosky

2
Ви не повинні використовувати sudoз --user. Що --userвстановлюється в інсталяцію, ~/Libraryа не /LibraryВам не потрібно використовувати sudoдля її установки. Але після встановлення з sudoними всіма каталогами та файлами належать root. Тоді вам доведеться використовувати sudoщось інше. Що, у свою чергу, вимагатиме від вас використання sudoінших речей, якими ви не повинні користуватися. Тоді навіть чесна помилка може перейти від викидання помилки, до знищення даних.
Бруно Броноський

Відповіді:


205

Інструкції, що розповідають 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. Але знову ж таки, не потрібно судо, і вам потрібно вручну встановити PATHзмінну середовища.


5
Якщо немає virtualenv не потрібно , і ви хочете , щоб в глобальному масштабі (наприклад , /Library/Python/2.7/site-packages) встановити модулі, спробуйте моє рішення нижче з допомогою easy_install stackoverflow.com/a/33463702/3078330
smat88dd

3
Чи є у вас посилання на цю точку зору на те, що "sudo pip" є поганим ("як час показало, що судо-піп є порушеною практикою")? Я не бачу жодного обговорення судо в цитатах, які ви даєте, і в підручнику перераховано перший крок до створення virtualenvs як "pip install virtualenv", який, здається, створює кругову залежність, намагаючись слідувати вашим порадам.
фон

1
@Von: pip install virtualenvбільше не потрібно для Python 3.4+, оскільки вони оснащені вбудованим python -m venvеквівалентом virtualenv. docs.python.org/3/library/venv.html
Mikko Ohtamaa

29
З усією повагою, це не стосується оригінального питання. Я намагаюся встановити IPython і зробити його доступним у всьому світі (для всіх користувачів на моїй машині), і ні віртуален, ні pip install --user IPythonдопомога в цьому. Крім того, pip install --user IPythonне вдається розмістити ipythonкоманду в $PATH(принаймні, на моїй машині).
jpetazzo

3
Ви навчили мене, а також заощадили мій час. Велике спасибі, що я перестав використовувати судо і все спрацювало! Чудова відповідь.
Parth Gupta

24

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

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

Редагувати: без повторної перевірки, але через коментарі; видається, що різні (OSX та встановлені на пивоварінні) установки перешкоджають одна одній, тому вони, згадані інструменти, дійсно вказують на різні місця (оскільки вони належать до різних установок). Я розумію, що зазвичай ці інструменти з однієї точки встановлення в одну і ту ж папку.


У вас встановлено два різних інтерпретатора Python і easy_installналаштований для іншого?
Мікко Охтама

У мене є встановлені 2-3 різні версії Python, але у мене є easy_installдля всіх з них: easy_install-2.6, easy_install-2.7,easy_install-3.5
smat88dd

Швидше за все , pipі easy_installвказують на різні Пітона. Ви можете зрозуміти це за допомогою whichкоманди UNIX, а потім визначити правильну pipкоманду для використання.
Мікко Охтамаа

1
Можливо, перед оновленням слід встановити старий OSX?
Мікко Охтама

1
pip та easy_install використовують різні місця встановлення - ні, вони використовують ці ж місця. Це спрацювало випадково, коли @MikkoOhtamaa намагався показати вас у своїх коментарях. Це явно невідповідь.
Пьотр Доброгост

19

Вам слід перевстановити Python:

brew reinstall python

Щоб заварити, перегляньте домашню сторінку варіння .


Я другий. я біжу brew install pythonтоді, я думаю pip, вже на місці. Після цього pipінсталяції працював (я мав аналогічні проблеми ж / дозволів і піп тартаном на установках)
travelingbones

15

pip install --ignore-installed six

Це зробить роботу, тоді ви можете спробувати свою першу команду.

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


У моєму випадку я теж повинен був зробити pip install --ignore-installed setuptools.
ithos67

2
Ні, це не зробить роботу через відсутність дозволів.
Пьотр Доброгост

11

Використовується pip3 install <package>замість цього і вирішити проблему дозволу з pip.


10
FYI, це спрацювало тому, що pip3використовується Python 3, який зазвичай встановлюється користувачем. З іншого боку, Python 2 (2.7) постачається з macOS і захищений так, як пояснюється відповідь, що відповідає найвищій оцінці.
Хан Нгуен

10

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

  1. Використовуйте pip install --user package_nameдля встановлення пакета, який повинен містити виконувані файли CLI.
  2. Запустіть оболонку пітона і 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>

10

Та сама помилка

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 

Сподіваюся, це допоможе тому, хто стикається з подібною проблемою!


3
Ви не повинні використовувати sudoз --user. Що --userвстановлюється в інсталяцію, ~/Libraryа не /LibraryВам не потрібно використовувати sudoдля її установки. Але після встановлення з sudoними всіма каталогами та файлами належать root. Тоді вам доведеться використовувати sudoщось інше. Що, у свою чергу, вимагатиме від вас використання sudoінших речей, якими ви не повинні користуватися. Тоді навіть чесна помилка може перейти від викидання помилки, до знищення даних.
Бруно Броноський

9

У мене були ті самі проблеми. Як вже згадували інші, не запускайте інсталяцію pip разом із sudo. Біжи

brew doctor 

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


6

Трудно працювати з 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.


4

Я думаю, у вас є конфлікт з іншим пакетом. Для мене це було six. Тому вам потрібно використовувати таку команду:

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

або

pip install --ignore-installed six


3
У якій частині відповіді, наданої @MikkoOhtamaa, ви не розумієте, що ви все ще пропонуєте використовувати судо з піп ?
Пьотр Доброгост

@PiotrDobrogost, чому ти не прочитаєш належним чином, перш ніж запитувати. Моя відповідь стосується six.
Рухул Амін

3
Знову ж таки, яку частину відповіді, яку дав @MikkoOhtamaa, ви не розумієте, що все ж пропонуєте використовувати судо з піп ?
Пьотр Доброгост

1

Я повністю згоден з Мікко, але якщо ви все-таки хочете це зробити, ось такий спосіб:

  • Перезапуск у режимі відновлення (Утримуйте cmd + R)
  • Відкрити термінал від комунальних служб
  • Використовуйте команду csrutil disable

6
Це може бути небезпечною порадою, не пояснюючи наслідків відключення Захисту цілісності системи. Одне врахування - це сподівання, що він більше ніколи не буде працювати належним чином, якщо ви не ввімкнете його відносно швидко, як Windows UAC та Virtualization.
Енді Магун

0

У мене встановлений python2.7 через заварку, і наступне вирішило мою проблему

заварювати встановити нуме

Він встановлює python3, але він все ще працює і встановлює його також для 2.7.


Працювали бездоганно. Дякую!!
NightFury
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.