2013-02-20 58 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。