2011-10-13 4 views
6

나는 virtualenv : /usr/local/pythonenv/BASELINE/usr/local/pythonenv/django1으로 두 개의 파이썬 환경을 만들었습니다. 둘 다 --no-site-packages를 사용하여 만들었습니다. easy_install을 사용하여 django1 환경에 django를 설치했습니다.mod_wsgi python이 표준 라이브러리에서 가져올 수 없습니다.

WSGIPythonHome /usr/local/pythonenv/BASELINE 

내 django.wsgi 파일과 같이 시작합니다 :

내 wsgi.conf 파일은 파이썬 인터프리터 설정하려면이 라인이 내 사이트를 방문하려고 할 때,

import site 
site.addsitedir('/usr/local/pythonenv/django1/lib/python2.7/site-packages') 
import os 
import sys 

하지만를 I 500 오류가 발생하고, 아파치/error_log는 다음이 포함 나는 파이썬 인터프리터가 흐름을 가져올 수 없습니다 이유에 분실하고

[error] Traceback (most recent call last): 
[error] File "/service/usr/local/django_apps/apache/django.wsgi", line 1, in ? 
[error]  import site 
[error] ImportError: No module named site 

을 n 표준 라이브러리. 나는 심지어 httpd가/usr/local/pythonenv/BASELINE에서 인터프리터를 사용하고 있는지 확인하는 방법조차 잘 모르겠다. 그래서 좋은 시작이 될 것이다.

편집 : 관련이 없지만 나는 여기 또는 ServerFault에 게시해야하는지에 관해서는 상당히 찢어졌습니다. 그 앞면에 대한 조언이 감사합니다.

편집 : http://code.google.com/p/modwsgi/wiki/DebuggingTechniques 덕분에 디버그 정보를 얻을 수있었습니다. 나는

import sys 
def application(environ, start_response): 
    status = '200 OK' 
    output = 'Hello World!' 
    print >> environ['wsgi.errors'], sys.path 
    print >> environ['wsgi.errors'], sys.prefix 
    print >> environ['wsgi.errors'], sys.executable 

    response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output] 

이는/var// 아파치/error_log에 로그에 파이썬 인터프리터 정보를 넣어 포함하도록 내 django.wsgi 스크립트를 변경했습니다. 오류 출력 :

[error] ['/usr/local/pythonenv/BASELINE/lib64/python24.zip',  '/usr/local/pythonenv/BASELINE/lib64/python2.4/', '/usr/local/pythonenv/BASELINE/lib64/python2.4/plat-linux2', '/usr/local/pythonenv/BASELINE/lib64/python2.4/lib-tk', '/usr/local/pythonenv/BASELINE/lib64/python2.4/lib-dynload'] 
[error] /usr/local/pythonenv/BASELINE 
[error] /usr/bin/python 

그래서 sys.path와 sys.executable은 내 문제를 지적합니다. 어떤 이유로 sys.path는 존재하지 않는 lib 파일을 사용하고 있습니다 (BASELINE은 lib64 디렉토리를 포함하지 않으며 Python2.7로 생성되었습니다). sys.executable은 mod_wsgi가 기본/usr/bin/python 인터프리터가 아니라/usr/local/pythonenv/BASELINE/bin에있는 인터프리터입니다.

왜 이런지는 모르겠지만 적어도 조금은 더 알고 있습니다.

EDIT :이 문제는 해결되었지만 Django는 반드시 "Python 실행 파일 :/usr/bin/python"을 나열해야합니다 (파이썬 버전 : 2.7.2 이후로는 말할 수 있습니다)./usr/local/bin/python을 사용합니다. 이게 정상인가?

답변

4

mod_wsgi가 Python 2.7에 대해 컴파일되지 않았을 가능성이 있습니다. 다른 파이썬 버전에 대해 컴파일 된 mod_wsgi와 함께 한 파이썬 버전에는 virtualenv를 사용할 수 없습니다.

읽기에서 :

http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Shared_Library

그 문서의 확인을한다.

+1

네, 이것이 문제였습니다. ./configure --with-python =/usr/local/bin/python을 실행하고 나서 make와 make를했기 때문에 파이썬 2.7에 대해 mod_wsgi를 컴파일했다고 생각했지만, 여전히 오래된 객체를 가지고 있기 때문에 작동하지 않았다. 거기 앉아. 나는 깨끗하게 만들어야 만했다. – sans

관련 문제