尝试导入python模块时的疯狂行为

尝试导入python模块时的疯狂行为,python,django,pip,python-module,django-tagging,Python,Django,Pip,Python Module,Django Tagging,我想用apachemod wsgi部署一个django webapp,但我遇到了一些问题,我已经追踪到这一行(django标记模块缺失): [Wed Feb 20 13:08:42 2013][error][client 172.19.130.50]导入错误:没有名为tagging的模块 现在,当我尝试以root和apache用户身份运行pip-python(我使用的是CENTOS 6)时,这里是我的输出: [root@app1 site-packages]# pip-python freeze

我想用apachemod wsgi部署一个django webapp,但我遇到了一些问题,我已经追踪到这一行(django标记模块缺失):

[Wed Feb 20 13:08:42 2013][error][client 172.19.130.50]导入错误:没有名为tagging的模块 现在,当我尝试以root和apache用户身份运行pip-python(我使用的是CENTOS 6)时,这里是我的输出:

[root@app1 site-packages]# pip-python freeze | grep tag django-tagging==0.3.1 django-taggit==0.9.3 [root@app1站点包]#pip python冻结| grep标记 django标记==0.3.1 django taggit==0.9.3 已安装标记

[root@app1 site-packages]# sudo -u apache pip-python freeze | grep tag django-tagging==0.3.1 django-taggit==0.9.3 [root@app1站点包]#sudo-u apache pip python freeze | grep标记 django标记==0.3.1 django taggit==0.9.3 Apache用户也这么说

[root@app1 /]# 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 >>> [root@app1/]#python Python2.6.6(r266:84292120912年9月11日08:34:23) [GCC 4.4.6 20120305(Red Hat 4.4.6-4)]关于linux2 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 >>>导入标记 >>> 确定根可以导入标记

[root@app1 /]# 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 >>> [root@app1/]#sudo-u apache python Python2.6.6(r266:84292120912年9月11日08:34:23) [GCC 4.4.6 20120305(Red Hat 4.4.6-4)]关于linux2 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 >>>导入标记 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ImportError:没有名为tagging的模块 >>> 但是apache用户不能!!!!!我如何才能使这项工作

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

更新1: 我真的不记得我是如何安装django标记模块的,但可能是作为root用户安装的,因为apache无法全局安装模块

更新2: 以下是martijn pieters建议的输出:

[root@app1 /]# 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'] [root@app1 /]# 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'] [root@app1 /]# 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')() ) [root@app1 /]# 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')() ) [root@app1/]#sudo-u apache python-c'导入系统;打印系统路径' 4.1.0-py2.6-linux-2.6-8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 4.7蛋“,”/usr/usr/lib/lib/python 2.6 6 6/usr/libr/libr/lib/libr/lib/lib/lib/lib/python 2 2 2.6/python 2.6/pytho2.6/python 2.6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7.6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7/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'] [root@app1/]#python-c'导入系统;打印系统路径' 4.1.0-py2.6-linux-2.6-8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 4.7蛋“,”/usr/usr/lib/lib/python 2.6 6 6/usr/libr/libr/lib/libr/lib/lib/lib/lib/python 2 2 2.6/python 2.6/pytho2.6/python 2.6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7.6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7/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'] [root@app1/]#sudo-u apache head`哪个pip python` #!/usr/bin/python #EASY-INSTALL-ENTRY-SCRIPT:'pip==0.8','console\u scripts','pip' __需要uu='pip==0.8' 导入系统 从打包资源导入加载入口点 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 系统出口( 加载入口点('pip==0.8','console\u scripts','pip')() ) [root@app1/]#头`哪一个皮普` #!/usr/bin/python #EASY-INSTALL-ENTRY-SCRIPT:'pip==0.8','console\u scripts','pip' __需要uu='pip==0.8' 导入系统 从打包资源导入加载入口点 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 系统出口( 加载入口点('pip==0.8','console\u scripts','pip')() ) 两者完全相同:(

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

[root@app1 /]# 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 [root@app1/]#sudo-u apache python Python2.6.6(r266:84292120912年9月11日08:34:23) [GCC 4.4.6 20120305(Red Hat 4.4.6-4)]关于linux2 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 >>>进口django >>>进口扭曲 >>>进口开罗 更新4:我讨厌我自己。问题是网站的访问权限 /usr/lib/python2.6/site-packages/tagging/directory!它们是drw-r--r--(644),而不是正确的drwxr-xr-x(755),因此apache用户无法进入目录:(


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

我经历过类似的行为,并最终将要导入的模块的确切路径添加到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。这发生在我的Ubuntu 10.04的apache2中。Debian stable最近在apache2中进行的设置和测试不再需要sys.path.append了。

你是如何安装的
pip
it的?你是以root用户身份还是以apache用户身份安装的?以不同用户的身份安装会给你带来不同的体验对pip.com中模块的不同访问比较
sudo-u apache python-c'导入sys;print sys.path'
python-c'导入sys;print sys.path'
,以及
sudo-u apache head`哪个pip python`
head`哪个pip python`
可能?您可以导入其他模块吗?下次还可以阅读使用virtualenv。您有什么问题吗已启用ELinux?请检查系统日志以获取线索。
import sys
PACKAGES ='/usr/local/lib/python2.6/dist-packages/'
sys.path.append(PACKAGES + 'django_compressor-1.1.1-py2.6.egg')