【问题标题】:package exists with `sudo python`, but not when running `python`包与`sudo python`一起存在,但在运行`python`时不存在
【发布时间】:2016-03-08 10:32:24
【问题描述】:

我正在 AWS 上配置一台机器。当我在 AWS 公共云上设置这台机器时(使用标准发行的 Ubuntu AMI),我可以在系统范围的 python 分发中成功地sudo pip install -r REQUIREMENTS 我需要的所有 python 包(如 Flask):

[bash]$ python -c "import flask; print flask.__file__"
/usr/local/lib/python2.7/dist-packages/flask/__init__.pyc
[bash]$ python -c "import pprint, sys; pprint.pprint(sys.path)"
['',
 '/usr/local/lib/python2.7/dist-packages/setuptools-20.2.2-py2.7.egg',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']

当我在私有 Ubuntu AMI 上使用相同的 sudo pip install -r REQUIREMENTS 时(无疑已经适应了“更好的安全性”),这些包似乎安装得很好,但是当我从命令行运行 python 时,我得到一个ImportError

[bash]$ python -c "import flask; print flask.__file__"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named flask

有趣的是,使用 sudo 运行命令会产生我在公共 AWS 账户上获得的预期结果:

[bash]$ sudo python -c "import flask; print flask.__file__"
/usr/local/lib/python2.7/dist-packages/flask/__init__.pyc

sys.path 在运行 pythonsudo python 时是相同的,并且两者似乎都有 /usr/local/lib/python2.7/dist-packages 存档:

[bash]$ python -c "import pprint, sys; pprint.pprint(sys.path)"
['',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']
[bash]$ sudo python -c "import pprint, sys; pprint.pprint(sys.path)"
['',
 '/usr/local/lib/python2.7/dist-packages/setuptools-20.2.2-py2.7.egg',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']

非常欢迎在这里提出任何建议。我以前从未见过这样的事情,我无法弄清楚这个修改后的 Ubuntu AMI 有什么不同可能导致问题。

【问题讨论】:

  • 这很奇怪。在我的脑海中,有三件事要检查:1)烧瓶安装的文件/目录的权限。 2) 检查pip 版本,并确保它与您的Python 版本匹配。执行pip --version 并确保它是正确的版本(Python 2.7 或 Python 3.x)。 3)我假设您的需求文件中还有其他依赖项。尝试一个新的环境并安装flask(只是为了排除其他库引起问题的可能性)。
  • @larsbutler 原来/usr/lib/python2.7/dist-packages 目录存在一些权限问题。我将在下面添加一个问答风格的回复来揭示答案。非常感谢您的帮助!

标签: python ubuntu amazon-web-services


【解决方案1】:

/usr/local/lib/ 在你的 PATH 中吗?请与echo $PATH 联系。如果没有,请按照此 SA 线程添加它:https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path

【讨论】:

    【解决方案2】:

    原来/usr/local/lib/python2.7/dist-packages 目录没有a+r 访问权限。结果,我们不得不运行一些命令来修复问题:

    # change permissions on the directories to read and execute, files to read
    find /usr/local/lib/python2.7 -type d | xargs sudo chmod a+rx
    find /usr/local/lib/python2.7 -type f | xargs sudo chmod a+r
    

    这是一个非常奇怪的问题,我希望有一天有人会发现这很有用(或者更好的是,一开始就不会遇到问题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多