OSX El Capitan:sudo pip install 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
Bruno Bronosky '17

2
您不应sudo与一起使用--user。什么--user是安装到~/Library而不是/Library您不必sudo在那里安装。但是,一旦安装完成sudo,目录和文件便归root。然后,您必须使用sudo对他们执行的其他任何操作。反过来,这将要求您将sudo其他不应该使用的东西用于其他用途。这样,即使是诚实的错误,也可以从引发错误到破坏数据。
布鲁诺·布罗诺斯基

Answers:


205

说明指示sudo pip install本质上是错误的。

如果有任何说明您应该这样做的教程,sudo pip请针对此软件包提交错误。作者正在对Python社区进行教育,因为时间已被证明sudo pip是一种无效的做法。

OSX El Capitan引入了一种防止损坏操作系统文件的机制/System/Library/Frameworks/Python.framework/Versions/2.7/share是受保护的地点之一。普通用户没有理由在此处放置或写入任何文件。这是因为操作系统本身依赖于这些文件sudo pip,并且在上述所有作用下,它们将无条件地覆盖它们。通常,坏事不会发生,但是机会总是存在。Apple希望保护其OS用户以防意外安装。

相反,您需要在本地安装Python包(例如IPython)到用户的home文件夹中。最简单的方法是创建一个虚拟环境将其激活,然后在虚拟环境中运行pip

例:

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

更多信息

或者,一个人应该能够做pip install --user。但是同样,不需要sudo,您需要手动设置PATH环境变量。


5
如果不需要virtualenv,并且您想全局安装(例如/Library/Python/2.7/site-packages)模块,请使用easy_install stackoverflow.com/a/33463702/3078330
smat88dd

3
您是否对“ sudo pip”不好(例如,时间已证明sudo pip是一种坏习惯)的观点对此引用?在您提供的引文中,我没有看到关于sudo的任何讨论,并且该教程列出了将virtualenvs创建为“ pip install virtualenv”的第一步,这似乎在尝试遵循您的建议而创建了循环依赖项。

1
@Von:pip install virtualenvPython 3.4+不再需要,因为它们带有内置的python -m venvvirtualenv等效项。docs.python.org/3/library/venv.html
Mikko Ohtamaa 2015年

29
出于所有应有的尊重,这并没有解决最初的问题。我正在尝试安装IPython并使其在全球范围内可用(供我的计算机上的所有用户使用),而virtualenv pip install --user IPython对此也没有帮助。此外,pip install --user IPython无法将ipython命令放入$PATH(至少在我的机器上)。
jpetazzo

3
您教了我,也节省了我的时间。非常感谢我停止使用sudo,一切正常!好答案。
Parth Gupta

24

我遇到了同样的问题,但是使用easy_install "module"为我解决了问题。

我不确定为什么,但是pip和easy_install使用不同的安装位置,而easy_install选择了正确的位置。

编辑:无需重新检查,但由于评论;似乎不同的(OSX和Brew安装的)安装会相互干扰,这就是为什么它们提到的工具确实指向不同的位置的原因(因为它们属于不同的安装)。我知道通常这些工具从一个安装点指向同一文件夹。


您是否安装了两个不同的Python解释器,easy_install并配置了另一个解释器?
Mikko Ohtamaa 2015年

我安装了2-3个不同版本的Python,但我easy_install对所有的人:easy_install-2.6easy_install-2.7easy_install-3.5
smat88dd

最有可能的pip,并easy_install指向不同的Python的。您可以使用whichUNIX命令来解决此问题,然后找出pip要使用的正确命令。
Mikko Ohtamaa 2015年

1
升级之前是否可以从旧OSX预先安装?
Mikko Ohtamaa 2015年

1
pip和easy_install使用不同的安装位置 –不,它们使用完全相同的位置。它的工作由事故作为@MikkoOhtamaa试图向您展示在他的评论。这显然是无答案的。
Piotr Dobrogost

19

您应该重新安装Python:

brew reinstall python

要获得冲泡,请参阅冲泡主页


我第二。我跑了,brew install python我想pip已经到位了。之后,pip安装工作(我有类似的问题瓦特/权限和安装PIP想逃)
travelingbones


11

用来pip3 install <package>代替与解决权限问题pip


10
仅供参考,之所以奏效pip3,是因为使用了Python 3(通常由用户安装)。另一方面,Python 2(2.7)随macOS一起提供,并且受到最高评价的答案的保护。
庆阮

10

TL; DR $ PATH修复

  1. 使用pip install --user package_name安装包,应包括CLI可执行文件。
  2. 启动python shell并 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'

在这里我用--usersudo来解决这个问题

$ 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

我有同样的问题。正如其他人所提到的,不要使用sudo运行pip install。跑

brew doctor 

并修复警告,您应该可以继续进行pip安装。


6

出于以下几个原因,很难在El Capitan上开展工作:

  1. OS X未正确设置一些distutils变量,因此pip尝试将辅助文件安装在下的位置/System/Library/。El Capitan阻止了此操作,这是您遇到的错误。
  2. OS X在之下包含了许多过时的软件包/System/Library/。点子经常想升级这些,但不能在El Capitan上升级。
  3. OS X /System/Library/在python搜索顺序中的位置比/Library/Python/2.7/site-packages(系统范围内的python软件包位置)高,因此,即使您设法安装某些软件包的较新版本,旧软件包仍然会被加载,从而破坏了某些依赖性。

https://apple.stackexchange.com/a/223163/143849上提供了所有这些的解决方法。但是,最好通过标准的Python安装程序Homebrew或Anaconda安装自己的Python版本。


4

我想您与其他软件包有一些冲突。对我来说是six。因此,您需要使用以下命令:

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

要么

pip install --ignore-installed six


3
@MikkoOhtamaa给出的答案的哪一部分不明白您是否仍然建议将sudopip一起使用
Piotr Dobrogost

@PiotrDobrogost,为什么在问之前不能正确阅读。我的答案是关于six
Ruhul Amin

3
同样,您不明白@MikkoOhtamaa给出的答案的哪一部分仍建议您将sudopip一起使用
Piotr Dobrogost

1

我完全同意Mikko,但是如果您仍然想要这样做,可以采用以下方法:

  • 在恢复模式下重新启动(按住cmd + R)
  • 从公用程序打开终端
  • 使用命令 csrutil disable

6
如果不解释禁用系统完整性保护的含义,这可能是危险的建议。需要考虑的一个问题是,如果您不相对较快地重新启用它,它将像Windows UAC和Virtualization一样无法再次正常工作。
andy magoon's

0

我通过brew安装了python2.7,以下解决了我的问题

brew安装numpy

它安装了python3,但仍然可以运行并将其设置为2.7。


完美地工作。谢谢!!
NightFury
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.