python - easy_install 和文件权限

标签 python macos bash permissions

作为前言,我目前正在运行 OSX 10.9.1 和 Python 2.7。

我想使用 easy_install 安装 Python 包(在本例中为 pip)。首先我尝试:

easy_install pip

然后我收到一条错误消息,指出我没有对 site-packages 目录的写入权限。没问题:

sudo easy_install pip

一切都下载得很好。下面显示了我安装 pip 后的 Bash session :

$ pip
-bash: /usr/local/bin/pip: Permission denied
$ cd /usr/local/bin/pip
$ ls -l

...
-rwx------  1 root   admin       275 Jan 10 11:05 pip
...

$ chmod 754 pip
chmod: Unable to change file mode on pip: Operation not permitted
$ sudo chmod 754 pip
$ pip
Traceback (most recent call last):
  File "./pip", line 5, in <module>
    from pkg_resources import load_entry_point
  File "build/bdist.macosx-10.8-intel/egg/pkg_resources.py", line 3007, in <module>

  File "build/bdist.macosx-10.8-intel/egg/pkg_resources.py", line 728, in require
    requirements specified when this environment was created, or False
  File "build/bdist.macosx-10.8-intel/egg/pkg_resources.py", line 626, in resolve

pkg_resources.DistributionNotFound: pip==1.5

好吧,也许有些权限仍然困惑。以下是当我查看 /Library/Python/2.7/site-packages/ 时 Finder 向我显示的内容:

No permission

这是查看同一目录时 ls -l 返回的内容:

...
drwx------   4 root  wheel     136 Jan 10 11:24 pip-1.5-py2.7.egg
...

好的,所以我显然仍然没有使用 pip 的权限,因为我没有存档文件的执行权限。怎么样:

$ chmod 754 pip-1.5-py2.7.egg
chmod: Unable to change file mode on pip-1.5-py2.7.egg/: Operation not permitted
$ sudo chmod 754 pip-1.5-py2.7.egg
$ pip
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5', 'console_scripts', 'pip')()
  File "build/bdist.macosx-10.8-intel/egg/pkg_resources.py", line 378, in load_entry_point
    def get_resource_stream(manager, resource_name):
  File "build/bdist.macosx-10.8-intel/egg/pkg_resources.py", line 2565, in    load_entry_point
    section = line[1:-1].strip()
ImportError: Entry point ('console_scripts', 'pip') not found

我的假设是,所有权限都搞砸了,因为我使用了 sudo,现在我只是在追逐权限。但这可能是错误的。我从来不记得在升级到 OSX 10.9 之前遇到过这个问题。

我的问题是:即使我是计算机的管理员,Unix 系统是否总是使用 sudo 执行此操作?有没有办法让我永久纠正这个问题,以便我实际上有权运行已安装的软件包?您认为我的系统上某个地方的设置不正确吗?

最佳答案

您的假设是正确的,所有权限都被搞砸了,因为您使用了 sudo。首先改掉使用 sudo 来“解决”问题的习惯。您应该像以 root 身份登录一样仔细思考如何使用 sudo 进行操作。如果你的态度是“没问题:sudo ...”,你(最终)就会陷入一个受伤的世界。每次使用 sudo 时,您都会对 OSX 开箱即用的方式进行又一项更改。

接下来,改掉尝试将所有内容放入操作系统版本的 python 中的习惯。我建议首先清除您的/usr/local,尽管这可能会要求很多。

然后brew install python - 给自己一个 pristine python 。很好 - 您已经做到了。

which pip - 确保您使用的是刚刚安装在/usr/local 中的 pip brew;如果没有根据需要调整您的 ~/.bashrc 启动文件。

下一步 brew install virtualenvbrew install virtualenvwrapper - 当您 pip install 某些东西来支持仅影响该项目的项目时,请做到这一点一个项目。当您执行此操作时,将 export PIP_REQUIRE_VIRTUALENV=true 添加到 ~/.bashrc 中,这样您就不会忘记并在将来搞砸。

现在了解 virtualenv并开始了解项目的真正依赖关系,并停止对抗因不同项目的需求相互干扰而引起的冲突,以及不加区别地使用 sudo 会导致的一般位腐烂。

关于python - easy_install 和文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050953/

相关文章:

python - 我的神经网络模型有什么问题?

python - 如何将变量分配给对象名称?

python - 将字典列表合并为单个字典,为公共(public)键添加值

macos - Mac OS X 10.4+ 上的 Bash 配置

python - 根据多个标签文本查找父标签 - BeautifulSoup

macos - 顶点数组对象 - glGenVertexArrays GL_INVALID_OPERATION on OSX

xcode - Mac 应用程序因使用我未使用的沙盒授权而被拒绝

python - 如何抑制错误消息 : "Error in ` ./hubbard.exc' : corrupted size vs. prev_size"?

bash - 获取字符串中的第一个元素

bash - 使用 Bash 批量重命名文件