【问题标题】:Permission Denied while trying to run a Python package尝试运行 Python 包时权限被拒绝
【发布时间】:2015-12-27 15:42:47
【问题描述】:

我正在尝试在 AWS EC2 机器上使用名为 csvkit 的 Python 包。在遇到一些小问题后我能够安装它,这可能是相关的 - 运行 pip install csvkit

处引发错误
with open(path, 'rb') as stream:
    IOERROR: [Errno 13] Permission denied: '/usr/local/lib/python2.7/site-packages/python_dateutil-2.2-py2.7.egg/EGG-INFO/requires.txt'

但我可以使用其他命令安装它。

现在回到最初的问题 - 当我尝试在 csvkit 包中运行一个简单的函数(如 cavstat)时,这是完整的错误输出:

[username ~]$ csvstat
Traceback (most recent call last):
  File "/usr/local/bin/csvstat", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3020, in <module>
    working_set = WorkingSet._build_master()
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 614, in _build_master
    ws.require(__requires__)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 920, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 815, in resolve
    new_requirements = dist.requires(req.extras)[::-1]
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2552, in requires
    dm = self._dep_map
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2537, in _dep_map
    for extra, reqs in split_sections(self._get_metadata(name)):
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2978, in split_sections
    for line in yield_lines(s):
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2252, in yield_lines
    for ss in strs:
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2566, in _get_metadata
    for line in self.get_metadata_lines(name):
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1589, in get_metadata_lines
    return yield_lines(self.get_metadata(name))
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1581, in get_metadata
    return self._get(self._fn(self.egg_info, name))
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1692, in _get
    with open(path, 'rb') as stream:
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/site-packages/python_dateutil-2.2-py2.7.egg/EGG-INFO/requires.txt'

我什至不确定要搜索什么来查看问题所在。这与date-utils 有关吗? 我是 Linux 世界的新手,所以编辑配置文件和诸如此类的东西对我来说有点困难。

【问题讨论】:

  • 你试过chomd u+rw /usr/local/lib/python2.7/site-packages/python_dateutil-2.2-py2.7.egg/EGG-INFO/requires.txt.
  • 试了一下,得到了cannot access '/usr/local/lib/python2.7/site-packages/python_dateutil-2.2-py2.7.egg/EGG-INFO/re‌​quires.txt' No such file or directory

标签: python amazon-web-services amazon-ec2 python-dateutil


【解决方案1】:

如果您通过“pip install csvkit”进行系统范围的安装,您需要当前用户的 sudo 权限,这就是安装过程无法修改 /usr/local/lib/python2 的原因.7 结构。

如果您使用的是自己创建的 AWS 实例,那么为当前用户设置 sudo 权限应该非常简单。

如果您正在寻找一个包含更多内容的替代方案,您可以安装 virtualenv 并设置一个隔离的 virtualenv (https://virtualenv.pypa.io/en/latest/installation.html),但 virtualenv 对于一次性服务器来说可能是多余的。

这有帮助吗?

【讨论】:

  • 是的,这绝对有帮助。因此,在搜索如何添加 ec2-user 以获得 sudo 权限后,我遇到了这个:serverfault.com/questions/599357/…。我应该删除最后一行吗?
  • 如果您想授予 ec2-user 完全权限而无需密码,您可以添加以下行:ec2-user ALL=(ALL) NOPASSWD: ALL
  • 另外,在之前的评论中忽略了:使用 'visudo' 命令以 root 身份添加这些权限。也可以只使用 root 用户进行软件包安装,但这意味着在用户之间不断地来回弹出。这是一次性的改变,让生活更轻松。
  • 等等,你能详细说明一下吗?我应该在编辑文件时使用visudo,或者pip install csvkit?
  • 啊,很抱歉含糊其辞。要为您的 ec2 用户添加 sudo 权限,请更改为 root 用户,然后运行“visudo”命令,这将打开 sudoers 文件进行编辑。这是修改配置最安全的方法。
猜你喜欢
  • 2017-08-22
  • 1970-01-01
  • 2016-07-08
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2015-06-08
  • 2019-06-21
相关资源
最近更新 更多