처음부터 내가했던 모든 것을 자세하게 설명하는 긴 질문입니다. 희망이 도움이됩니다. 장고 응용 프로그램을 개발 중이며 프로덕션 서버에 배포해야합니다. 프로덕션 서버는 IT가 관리하는 가상 서버이며 루트 액세스 권한이 없습니다. 그들은/swadm 및/home/swadm에서 모듈 설치를 관리 할 수있는 권한을 나에게주었습니다. 그래서 나는 다음과 같은 배열을 생성 할 계획 한 :생산을위한 RHEL에서 python2.6.7 및 mod_wsgi3.3 구성 및 설치
나는 유지/swadm/etc/httpd/conf
을 httpd.conf 내 아파치 모듈 (mod_wsgi에) 내 장고 코드를 유지
/swadm/var/www/django/app
을 유지/swadm/etc/httpd/user-modules
/swadm/usr/local/python/2.6
django, south 등의 모듈을 사용하여 Python 2.6.7 설치를 유지 관리합니다./home/swadm/setup
필요한 소스 tarball을 저장합니다. 모든 건물을 짓고 밖으로 설치하기./home/swadm/workspace
개발중인 응용 프로그램 코드를 유지 관리합니다.
시스템에 python2.4.3 및 python2.6.5가 설치되어 있지만 많은 사용자 정의 모듈을 설치해야하는 경우 필자는 자체 Python 설치를 유지할 것을 권장합니다.
그래서 python2.6.7 소스를 다운로드했습니다. 공유 라이브러리를 사용할 수 있도록 Python이 설치되었는지 확인해야했습니다. --enable-shared
및 --prefix=/swadm/usr/local/python/2.6
옵션 만 사용하여 configure 스크립트를 실행하면 설치 될 것이지만 놀랍게도 시스템의 python2.6.5 설치를 가리키게됩니다.
$ /swadm/usr/local/python/2.6/bin/python
Python 2.6.5 (r265:79063, Feb 28 2011, 21:55:45)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
그래서 나는 예상되는 오류를 피하기 위해 (링크에서 알 수 있듯이) 내가 미리 디렉토리를 만들었다 확인하고
또한
./configure --enable-shared --prefix=/swadm/usr/local/python/2.6 LDFLAGS="-Wl,-rpath /swadm/usr/local/python/2.6/lib"
로 Building Python with --enable-shared in non-standard location에서 지침에 따라 구성 스크립트를 실행. 이제 /swadm/usr/local/python/2.6/bin/python
을 입력하면 올바른 파이썬 버전 2.6.7이 시작됩니다. 그래서 mod_wsgi를 설정하고 설치하는 것으로 넘어갔습니다. 나는
./configure --with-python=/swadm/usr/local/python/2.6/bin/python
/usr/lib64/httpd/modules
에 모듈을 설치하는 시도를 생성 된 메이크로 구성하고 내가 거기에는 쓰기 권한이 없습니다, 그래서 /swadm/etc/httpd/user-modules
에 설치하는 메이크 파일을 수정했습니다. (명령 인수가있을 수 있지만 그것을 알아낼 수 없었다). 모듈이 잘 만들어졌습니다. 내가 사용하는 테스트 WSGI 스크립트는
import sys
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
output = output + str(sys.version_info)
output = output + '\nsys.prefix = %s' % repr(sys.prefix)
output = output + '\nsys.path = %s' % repr(sys.path)
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
이었다 그리고 표시된 출력은 그래서
Hello World!(2, 6, 5, 'final', 0)
sys.prefix = '/swadm/usr/local/python/2.6'
sys.path = ['/swadm/usr/local/python/2.6/lib64/python26.zip', '/swadm/usr/local/python/2.6/lib64/python2.6/', '/swadm/usr/local/python/2.6/lib64/python2.6/plat-linux2', '/swadm/usr/local/python/2.6/lib64/python2.6/lib-tk', '/swadm/usr/local/python/2.6/lib64/python2.6/lib-old', '/swadm/usr/local/python/2.6/lib64/python2.6/lib-dynload']`
당신이 어떻게 든 mod_wsgi에 모듈이 여전히 시스템의 파이썬 2.6.5 설치 및 나의를 구성있어 참조 놀라운했다 정의 1. 나는 아파치에서 mod_wsgi documentation
- 설정
WSGIPythonHome
에 설명 된 여러 가지를 시도했다.파이썬 config 디렉토리에 심볼릭 링크를 생성/swadm/usr/local/python/2.6/lib/python2.6
-
/swadm/usr/local/python/2.6
및WSGIPythonPath
에 conf의는$ 에선 -s ../../libpython2.6.so
libpython2.6.so 파일을 가리 키도록$ ldd libpython2.6.so linux-vdso.so.1 => (0x00007fffc47fc000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b666ed62000) libdl.so.2 => /lib64/libdl.so.2 (0x00002b666ef7e000) libutil.so.1 => /lib64/libutil.so.1 (0x00002b666f182000) libm.so.6 => /lib64/libm.so.6 (0x00002b666f385000) libc.so.6 => /lib64/libc.so.6 (0x00002b666f609000) /lib64/ld-linux-x86-64.so.2 (0x00000031aba00000)
그리고
ldd mod_wsgi.so
승기를 : 나는ldd libpython2.6.so
을 수행 할 때
이 내가 볼 것입니다 ves
$ ldd /swadm/etc/httpd/user-modules/mod_wsgi.so
linux-vdso.so.1 => (0x00007fff1ad6e000)
libpython2.6.so.1.0 => /usr/lib64/libpython2.6.so.1.0 (0x00002af03aec7000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002af03b270000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002af03b48c000)
libutil.so.1 => /lib64/libutil.so.1 (0x00002af03b690000)
libm.so.6 => /lib64/libm.so.6 (0x00002af03b893000)
libc.so.6 => /lib64/libc.so.6 (0x00002af03bb17000)
/lib64/ld-linux-x86-64.so.2 (0x00000031aba00000)
저는 파이썬과 mod_wsgi를 재설치하고 다시 구성하려고했지만 아무 소용이 없습니다. 내가 어디로 잘못 가고 있는지 알려주세요. (매우 긴 게시물을 위해 죄송합니다)
TLDR; 루트가 아닌 액세스 권한이있는 시스템에는 기본 파이썬 설치가 있습니다. 나는 내 자신의 파이썬과 파이썬 모듈을 관리하고있다. mod_wsgi을 설정하고 사용자 정의 파이썬으로 빌드 한 후에도 sys version_info와 경로를 출력하는 테스트 스크립트를 실행할 때 시스템의 파이썬을 가리킨다.
UPDATE 다음에 유래 통해 브라우징에 은 나를 위해 오류를 해결 mod_wsgi python2.5 ubuntu 11.04 problem에 그레이엄 Dumpleton하여이 답을 발견 (이전을 했어야). 이제 ldd mod_wsgi.so
을 실행하면 파이썬의 올바른 공유 라이브러리에 링크되어있는 것을 볼 수 있습니다. 이제 Django와 MySQLdb를 사용자 정의 Python 설치를 사용하여 설치했습니다. 그리고 지금은이 오류에 직면하고있다 :
The following error occurred while trying to extract file(s) to the Python egg
cache:
[Errno 13] Permission denied: '/var/www/.python-eggs'
The Python egg cache directory is currently set to:
/var/www/.python-eggs
Perhaps your account does not have write access to this directory? You can
change the cache directory by setting the PYTHON_EGG_CACHE environment
variable to point to an accessible directory.
그래서 나는
export PYTHON_EGG_CACHE=/swadm/var/www/.python-eggs
을 수행하여
PYTHON_EGG_CACHE
의 값을 변경했다. 하지만 여전히 같은 오류가 발생합니다. 나는 더 조사하고있다. 이 문제를 해결하면 업데이트됩니다. WSGI 스크립트 설정 환경 변수에 의해 해결