2013-02-20 1 views
3

아파치 mod-wsgi를 사용하여 배포하려는 django webapp에 문제가 있습니다.이 줄까지 추적했습니다 (장고 태그 모듈이 없습니다) :파이썬 모듈을 가져올 때 미친 동작이 발생했습니다.

내가 루트로와 아파치 사용자로 PIP-파이썬 (내가 CentOS는 6을 사용하고 있습니다) 실행하려고하면
 
[Wed Feb 20 13:08:42 2013] [error] [client 172.19.130.50] ImportError: No module named tagging 

지금, 여기 내 출력입니다 :

 
[[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 

아파치 사용자가 동일하게 말합니다!

 
[[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 
>>> 

Ok root는 태그를 가져올 수 있습니다!

 
[[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 
>>> 

하지만 아파치 사용자는 !!!!! 할 수 없습니다. 이 작품을 어떻게 만들 수 있습니까?

장고 태그 지정을 위해 /usr/lib/python2.6/site-packages/에 대한 모든 권한을 이중 및 삼중으로 검사했으며 다른 패키지와 동일합니다.

업데이트 1 : 장고 태그 지정 모듈을 어떻게 설치했는지 기억이 안납니다.하지만 아파치가 모듈을 전역으로 설치할 수 없기 때문에 아마 루트로 사용할 수 있습니다!

업데이트 2 :는 예, 아파치 사용자는로드 할 수 있습니다

 
[[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 정확히 : 다음은 마티 - 피에 터스의 제안의 출력입니다 다른 모듈 :

 
[[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/ 디렉토리의 액세스 권한입니다. 올바른 drwxr-xr-x (755) 대신에 drw-r-r-- (644) 이었으므로 아파치 사용자가 디렉토리에 들어갈 수 없었습니다. (

모든 것이 이제는 잘 작동합니다. 도움이 나는이 문제에 비슷한 경험 가져올 모듈의 정확한 경로를 파일 wsgi.py 장고에 추가 만난다

+0

어떻게'pip 설치 '했습니까? 사용자 root 또는 사용자 apache로 설치 했습니까? 다른 사용자로 설치하면 pip에있는 다른 모듈에 액세스 할 수 있습니다. –

+2

와 비교'sudo -u apache python -c 'import sys; print sys.path''를'python -c '와 함께 사용합니다. import sys; 인쇄 시스템.path-','sudo -u apache head \'와 같이 pip-python \''을 사용하면됩니다. –

+0

다른 모듈을 가져올 수 있습니까? 또한 [살아남은 nix 권한] (http://blog.yourlabs.org/post/19240900759/survive-linux-nix-permissions) – jpic

답변

1

!.

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

는 희망이 도움이

는 누구 인 어쩌면 아파치 또는 아마도 mod_wsgi 일지 모르겠다. 이것은 apache2에서 나에게 일어난 일이다. Ubuntu 10.04에서. 데비안에서 apache2의 설정을 저장하고 sys.path.append에 대한 테스트를 더 이상 필요로하지 않습니다.