我想用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用户无法进入目录:(
现在一切正常,谢谢所有帮助
你是怎么安装'pip的呢?你是以root用户还是用户apache安装的?作为不同的用户进行安装可让您以pip方式访问不同的模块。 – 2013-02-20 11:38:21
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
你可以导入其他模块吗?也读[幸存的nix权限](http://blog.yourlabs.org/post/19240900759/survive-linux-nix-permissions) – jpic 2013-02-20 11:53:48