繁体   English   中英

软件包与`sudo python`存在,但在运行`python`时不存在

[英]package exists with `sudo python`, but not when running `python`

我正在AWS上配置机器。 当我在AWS公共云上(使用标准发行版的Ubuntu AMI)设置这台机器时,我能够成功sudo pip install -r REQUIREMENTS在系统级python发行版中我需要的所有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

运行pythonsudo pythonsys.path相同,并且文件上都显示有/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的不同之处(可能引起问题)时遇到了麻烦。

/usr/local/lib/在您的PATH中? 检查echo $PATH 如果不是,请通过以下SA线程添加它: https : //unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path

事实证明/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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM