2013-02-20 4 views
3

У меня есть некоторые проблемы с django webapp Я хочу развернуть с Apache mod-wsgi, и я проследил их до этой строки (отсутствует модуль django-tagging):Сумасшедшее поведение при попытке импортировать модуль python

 
[Wed Feb 20 13:08:42 2013] [error] [client 172.19.130.50] ImportError: No module named tagging 

Теперь, вот мой выходной, когда я пытаюсь запустить пип-питон (я использую CentOS 6) как корень и как пользователь Apache: установлен

 
[[email protected] site-packages]# pip-python freeze | grep tag 
django-tagging==0.3.1 
django-taggit==0.9.3 

Tagging ...

 
[[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 не может !!!!! Как я могу сделать эту работу ????

Я выполнил двойной и тройной проверки всех прав на /usr/lib/python2.6/site-packages/ для django-tagging, и они такие же, как и другие мои пакеты.

Update 1: Я не помню, как я установить модуль Джанго пометки - но, вероятно, как корень, так как Apache не может устанавливать модули по всему миру!

Update 2: Вот вывод предложений Мартейн-Питерс'S:

 
[[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')() 
    ) 

точно так же :(

Update 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/! Они были drw-r-r-- (644) вместо правильного drwxr-xr-x (755), поэтому пользователь apache не смог войти в каталог :(

Все работает отлично сейчас, спасибо за все помочь

+0

как вы 'pip install' it? Вы установили его как пользовательский root или как пользователь apache? Установка в качестве разных пользователей дает вам различный доступ к модулям в pip. –

+2

сравнить 'sudo -u apache python -c 'import sys; print sys.path'' с помощью 'spython -c 'import sys; print sys.path'' и 'sudo -u apache head \', который pip-python \ '' с 'head \' который пип-питон \ '' возможно? –

+0

Можете ли вы импортировать другие модули? также читайте [выживающие разрешения nix] (http://blog.yourlabs.org/post/19240900759/survive-linux-nix-permissions) – jpic

ответ

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. Настройка реентов в apache2 из стабильной версии Debian и тестирование никогда не нуждались в sys.path.append больше.

Смежные вопросы