2013-02-20 60 views
3

我想用Apache mod-wsgi部署一个django web应用程序,但我已将它们追溯到此行(django-tagging模块缺失):尝试导入python模块时的疯狂行为

 
[Wed Feb 20 13:08:42 2013] [error] [client 172.19.130.50] ImportError: No module named tagging 

现在,这里是我的输出,当我尝试运行PIP-蟒蛇(我使用CentOS 6的)为根,作为Apache用户:安装

 
[[email protected] site-packages]# pip-python freeze | grep tag 
django-tagging==0.3.1 
django-taggit==0.9.3 

标记......

 
[[email protected] site-packages]# sudo -u apache pip-python freeze | grep tag 
django-tagging==0.3.1 
django-taggit==0.9.3 

Apache用户说的一样!

 
[[email protected] /]# python 
Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23) 
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import tagging 
>>> 

好的根可以导入标记!

 
[[email protected] /]# sudo -u apache python 
Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23) 
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import tagging 
Traceback (most recent call last): 
    File "", line 1, in 
ImportError: No module named tagging 
>>> 

但是,apache用户不能!!!!!我怎样才能做这项工作?

我已经对dusang-tagging的所有/usr/lib/python2.6/site-packages/权限进行了双重和三重检查,它们和我的其他软件包一样。

更新1: 我真的不记得我是怎么安装Django的标签模块 - 但可能是因为因为Apache无法安装全球根模块!

更新2: 这里的马亭,PIETERS的建议输出:

 
[[email protected] /]# sudo -u apache python -c 'import sys; print sys.path' 
['', '/usr/lib64/python2.6/site-packages/Twisted-12.1.0-py2.6-linux-x86_64.egg', '/usr/lib/python2.6/site-packages/django_cas-2.1.1-py2.6.egg', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info'] 
[[email protected] /]# python -c 'import sys; print sys.path' 
['', '/usr/lib64/python2.6/site-packages/Twisted-12.1.0-py2.6-linux-x86_64.egg', '/usr/lib/python2.6/site-packages/django_cas-2.1.1-py2.6.egg', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info'] 
[[email protected] /]# sudo -u apache head `which pip-python` 
#!/usr/bin/python 
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==0.8','console_scripts','pip' 
__requires__ = 'pip==0.8' 
import sys 
from pkg_resources import load_entry_point 

if __name__ == '__main__': 
    sys.exit(
     load_entry_point('pip==0.8', 'console_scripts', 'pip')() 
    ) 
[[email protected] /]# head `which pip-python` 
#!/usr/bin/python 
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==0.8','console_scripts','pip' 
__requires__ = 'pip==0.8' 
import sys 
from pkg_resources import load_entry_point 

if __name__ == '__main__': 
    sys.exit(
     load_entry_point('pip==0.8', 'console_scripts', 'pip')() 
    ) 

的是完全一样的:(

更新3: 是,Apache用户可以加载其他模块:

 
[[email protected] /]# sudo -u apache python 
Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23) 
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import django 
>>> import twisted 
>>> import cairo 

更新4:我讨厌自己。问题在于 /usr/lib/python2.6/site-packages/tagging/目录的访问权限!他们是drw-r - r--(644)而不是正确的drwxr-xr-x(755),所以apache用户无法进入目录:(

现在一切正常,谢谢所有帮助

+0

你是怎么安装'pip的呢?你是以root用户还是用户apache安装的?作为不同的用户进行安装可让您以pip方式访问不同的模块。 – 2013-02-20 11:38:21

+2

compare'sudo -u apache python -c'import sys;用'python -c'import sys打印sys.path'';打印系统。路径'和'sudo -u apache head \'哪个pip-python''带'head \'哪个pip-python \''也许? – 2013-02-20 11:44:53

+0

你可以导入其他模块吗?也读[幸存的nix权限](http://blog.yourlabs.org/post/19240900759/survive-linux-nix-permissions) – jpic 2013-02-20 11:53:48

回答

1

我曾经历过类似这样的行为的东西,并最终增加的Django wsgi.py模块文件的确切路径导入:!

import sys 
PACKAGES ='/usr/local/lib/python2.6/dist-packages/' 
sys.path.append(PACKAGES + 'django_compressor-1.1.1-py2.6.egg') 

希望它可以帮助

是谁责怪?不知道,也许apache或mod_wsgi。这发生在我在apache2从Ubuntu 10.04。来自Debian稳定版和测试版的apache2中的最近设置不再需要sys.path.append。