当导入pandas.DataFrame时出现“IOError:[Errno 13]权限被拒绝:..”错误。

9

我正在获得

IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/python_dateutil-2.2-py2.7.egg/EGG-INFO/top_level.txt'

当我尝试导入 pandas 时,出现问题。在 python3 控制台中导入 pandas 没有任何问题。代码执行也是使用 Python3 进行的。 start_simulation.py
from Market import Market
from TestingAlgorithm import TestingAlgorithm
from LiteForexHandler import LiteForexHandler
from Broker import Broker
from Portfolio import Portfolio

market = Market('./simulations/', 'test', TestingAlgortihm, LiteForexHandler,
    Broker, Portfolio)
market.run()`

LiteForexHandler.py的开始:

import sqlite3 as lite
from pandas import DataFrame
from DataHandler import DataHandler
import logging as log
from collections import defaultdict
...

最后是 Traceback

Traceback (most recent call last):
  File "start_simulation.py", line 3, in <module>
    from LiteForexHandler import LiteForexHandler
  File "/home/ioan/Dokumente/finance/stocker/LiteForexHandler.py", line 2, in <module>
    from pandas import DataFrame
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.13.1_501_g4c3b9e5-py2.7-linux-x86_64.egg/pandas/__init__.py", line 38, in <module>
    import pandas.core.config_init
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.13.1_501_g4c3b9e5-py2.7-linux-x86_64.egg/pandas/core/config_init.py", line 17, in <module>
    from pandas.core.format import detect_console_encoding
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.13.1_501_g4c3b9e5-py2.7-linux-x86_64.egg/pandas/core/format.py", line 9, in <module>
    from pandas.core.index import Index, MultiIndex, _ensure_index
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.13.1_501_g4c3b9e5-py2.7-linux-x86_64.egg/pandas/core/index.py", line 11, in <module>
    import pandas.index as _index
  File "index.pyx", line 34, in init pandas.index (pandas/index.c:15559)
  File "/usr/local/lib/python2.7/dist-packages/pytz-2014.2-py2.7.egg/pytz/__init__.py", line 29, in <module>
    from pkg_resources import resource_stream
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2823, in <module>
    add_activation_listener(lambda dist: dist.activate())
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 710, in subscribe
    callback(dist)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2823, in <lambda>
    add_activation_listener(lambda dist: dist.activate())
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2255, in activate
    self.insert_on(path)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2362, in insert_on
    self.check_version_conflict()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2401, in check_version_conflict
    for modname in self._get_metadata('top_level.txt'):
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2249, in _get_metadata
    for line in self.get_metadata_lines(name):
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1219, in get_metadata_lines
    return yield_lines(self.get_metadata(name))
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1211, in get_metadata
    return self._get(self._fn(self.egg_info,name))
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1326, in _get
    stream = open(path, 'rb')
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/python_dateutil-2.2-py2.7.egg/EGG-INFO/top_level.txt'

2
你可以尝试的一件事是在一个虚拟环境中安装每个软件包。由于某种原因,某个模块正在尝试访问/usr/local/lib中的文件,但是它无法这样做,因为你没有以超级用户身份运行脚本。 - elbear
1
我建议使用Anaconda安装Pandas,您可以在不使用sudo的情况下进行安装。 - Andy Hayden
我从Ubuntu仓库中安装了Python3-pandas包中的pandas...这不应该是最好的方式吗? - kave
你可以在没有sudo的情况下获得对/usr/local/lib的读取访问权限。在安装这些软件包时出了问题。在这种情况下,Virtualenv是您的好朋友,并通过pip安装所有所需的软件包。使用apt-get获取不同的Python软件包或与pip混合使用可能会导致不一致的情况。此外,希望很快pypi上的所有软件包都将使用Python wheels,这将使安装速度与apt-get中的预构建二进制文件一样快。 - qwwqwwq
这会让你得到一个旧版本的pandas,绝对不是推荐的方式。 - Andy Hayden
3个回答

15

这是python-dateutil已知的问题,pypi包中权限设置不正确:https://bugs.launchpad.net/dateutil/+bug/1243202。如果您以非pip方式安装,则可能会遇到此问题,但pip会规范化权限,因此不会有问题。

简单的解决方法是运行:

sudo chmod o+r /usr/local/lib/python2.7/dist-packages/python_dateutil-2.2-py2.7.egg/EGG-INFO/top_level.txt

并在dist-packages目录下遇到此问题的任何其他文件上运行相同的命令。


http://superuser.com/questions/106181/equivalent-of-chmod-to-change-file-permissions-in-windows - szxk
感谢szxk的帮助。我遇到了一堆包的13错误,所以将命令更改为:sudo chmod -R o+r /Library/Python/2.7/site-packages,以一次性获取所有包。我认为安装过程中没有任何奇怪的地方:只是pip install xyz,但它仍然不喜欢它。 - Pete855217

1

我在我的电脑上遇到了类似的问题。Pip不允许我安装任何东西,因为无法将任何内容写入我的site-packages目录中。虽然我不太喜欢这样做,但我运行了sudo chown -R $USER /Library/Python/2.7/site-packages/,现在Pip可以轻松地写入我的site-packages目录了。


9
您可能应该调用 sudo pip install 以便pip可以写入共享目录,或者调用 pip install --user 以便它不会尝试写入共享目录。 - Roland Weber

0
在我的情况下:
sudo chmod o+r /usr/local/lib/python2.7/dist-packages/python_dateutil-2.2-py2.7.egg/EGG-INFO/top_level.txt

一般来说:

sudo chmod o+r [XXX]

其中XXX是它所指向的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接