我想用Apache mod-wsgi部署的django webapp有一些问题,我已经将它们追溯到这一行(django标记模块丢失):
[Wed Feb 20 13:08:42 2013] [error] [client 172.19.130.50] ImportError: No module named 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 site-packages]# sudo -u apache pip-python freeze | grep tag django-tagging==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 /]# 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用户不能!!!!!我如何才能使这项工作????
我已经对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')() )
是完全相同的:(
更新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
更新4:我恨我自己。问题是 /usr/lib/python2.6/site-packages/tagging/目录的访问权限!它们是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和testing最近在apache2中的设置不再需要sys.path.append。
根据这个答案,您可以使用来使用类似这样的相对导入: 为什么相对导入不适用于sklearn。特征提取。文本 我验证了是一个具有以下功能的模块: 编辑 “不工作”,我的意思是它不导入模块。 我正在使用Python 3.4 绝对方式工作: 相对方式不:
本书是一部真实再现程序员成长历程的原创小说,以作者的学习、工作、生活为原型,分为大学、工作、创业三部分,环环相扣,精彩迭出,其中作为主线的实际项目案例都基于作者深厚的技术积淀。本书生动描写了软件行业中的形形色色的人和事,形象而深刻、生动而亲切,充满了智慧的职场警句,能让不同职业的读者都受益匪浅。
我试图上传一个图像到内存使用multer,然后处理它与夏普和保存到磁盘。当我尝试在我的中间件中做多个module.exports时。 错误是: TypeError FileUpload.Single不是函数 到目前为止的路线是: 当我刚刚有下面的路由之前,尝试添加图像处理,我没有得到一个错误;
我正在尝试将spree store安装到我的应用程序中,当我在终端中输入时,我收到以下错误: 来源https://rubygems.org 宝石“轨道”、“4.2.5.1” 宝石'pg','~ gem'sass rails','~ 宝石“丑陋的” 宝石咖啡轨道 gem'jquery rails' gem“涡轮链接” 宝石jBuilder 创业板“sdoc”~ 小组:开发,:测试 调试器控制台gem
问题内容: 导入glib失败,原因: 我怎样才能解决这个问题? Python版本是Python 2.7.3rc2。操作系统是Debian。 问题答案: 该模块是针对使用UCS-4作为其内部表示形式构建的Python构建的。您的Python是使用UCS-2作为内部表示构建的。重建模块,或重建Python。 官方FAQ中提到了此问题。这在python问题8654中进行了深入讨论。
主要内容:import 模块名 as 别名,from 模块名 import 成员名 as 别名使Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库。比如说,在前面章节中,我们使用了一些数学函数,例如余弦函数 cos()、绝对值函数 fabs() 等,它们位于 Python 标准库中的 math(或 cmath)模块中,只需要将此模块导入到当前程序,就可以直接拿来用。 前面章节中,已经看到使用 import 导入模块的语法,但实际上