gdal을 사용하는 Python 플라스크 응용 프로그램이 있습니다. 나는 다음과 같은 방법으로 시작합니다.
LD_PRELOAD=/opt/gdal-custom/lib/libgdal.so.1 PYTHONPATH=../somemodules/ scl enable python27 "source ../python27/bin/activate; python flaskapp.py"
하지만 mod_wsgi에서 호스팅하고 싶습니다. 하는 것은 LD_PRELOAD=/opt/gdal-custom/lib/libgdal.so.1 service httpd24-httpd restart
효과가 없는 것 같습니다. 내 Apache 구성에서 다음을 설정하지도 않습니다.
SetEnv LD_PRELOAD /opt/gdal-custom/lib/libgdal.so.1
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/rh/httpd24/root/var/www/wsgi-virtualenv
WSGIPythonPath /opt/rh/httpd24/root/var/www/AppFolder:/opt/rh/httpd24/root/var/www/SomeModules
WSGIScriptAlias /AppFolder /opt/rh/httpd24/root/var/www/AppFolder/app.wsgi
<Directory /var/www/AppFolder>
AllowOverride none
Require all granted
</Directory>
ldd의 출력은 다음과 같습니다.
(wsgi-virtualenv)ldd /opt/rh/httpd24/root/var/www/wsgi-virtualenv/lib/python2.7/site-packages/GDAL-1.11.2-py2.7-linux-x86_64.egg/osgeo/_gdal.so
linux-vdso.so.1 => (0x00007fffac9ff000)
libpython2.7.so.1.0 => /opt/rh/python27/root/usr/lib64/libpython2.7.so.1.0 (0x00007fce43438000)
libgdal.so.1 => /opt/gdal-custom/lib/libgdal.so.1 (0x00007fce42490000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fce42176000)
libm.so.6 => /lib64/libm.so.6 (0x00007fce41ef2000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fce41cdb000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fce41abe000)
libc.so.6 => /lib64/libc.so.6 (0x00007fce4172a000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fce41525000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007fce41322000)
libfreexl.so.1 => /usr/lib64/libfreexl.so.1 (0x00007fce41119000)
libgeos_c.so.1 => /usr/lib64/libgeos_c.so.1 (0x00007fce40ef2000)
libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007fce40c63000)
libodbc.so.2 => /usr/lib64/libodbc.so.2 (0x00007fce409fc000)
libodbcinst.so.2 => /usr/lib64/libodbcinst.so.2 (0x00007fce407ea000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fce405c2000)
libxerces-c-3.0.so => /usr/lib64/libxerces-c-3.0.so (0x00007fce40021000)
libjasper.so.1 => /usr/lib64/libjasper.so.1 (0x00007fce3fdc7000)
libnetcdf.so.6 => /usr/lib64/libnetcdf.so.6 (0x00007fce3fa82000)
libhdf5.so.6 => /usr/lib64/libhdf5.so.6 (0x00007fce3f49a000)
libogdi.so.3 => /usr/lib64/libogdi.so.3 (0x00007fce3f278000)
libgif.so.4 => /usr/lib64/libgif.so.4 (0x00007fce3f06f000)
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00007fce3ee1f000)
libgta.so.0 => /usr/lib64/libgta.so.0 (0x00007fce3ec14000)
libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00007fce3e9ee000)
libcfitsio.so.0 => /usr/lib64/libcfitsio.so.0 (0x00007fce3e63a000)
libpq.so.5 => /usr/lib64/libpq.so.5 (0x00007fce3e411000)
librt.so.1 => /lib64/librt.so.1 (0x00007fce3e209000)
libpcre.so.0 => /lib64/libpcre.so.0 (0x00007fce3dfdd000)
libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007fce3dd88000)
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007fce3da35000)
libz.so.1 => /lib64/libz.so.1 (0x00007fce3d81f000)
/lib64/ld-linux-x86-64.so.2 (0x0000003e73a00000)
libgeos-3.4.2.so => /usr/lib64/libgeos-3.4.2.so (0x00007fce3d479000)
libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007fce3d270000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fce3d056000)
libhdf5_hl.so.6 => /usr/lib64/libhdf5_hl.so.6 (0x00007fce3ce24000)
libproj.so.0 => /usr/lib64/libproj.so.0 (0x00007fce3cbd7000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x00007fce3c9ce000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x00007fce3c7b2000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007fce3c475000)
liblzma.so.0 => /usr/lib64/liblzma.so.0 (0x00007fce3c253000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fce3c042000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fce3bdd6000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fce3b9f2000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fce3b7ae000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fce3b577000)
libldap_r-2.4.so.2 => /lib64/libldap_r-2.4.so.2 (0x00007fce3b31e000)
libidn.so.11 => /lib64/libidn.so.11 (0x00007fce3b0ec000)
libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x00007fce3ae9c000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fce3abb5000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fce3a989000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fce3a785000)
libssl3.so => /usr/lib64/libssl3.so (0x00007fce3a545000)
libsmime3.so => /usr/lib64/libsmime3.so (0x00007fce3a319000)
libnss3.so => /usr/lib64/libnss3.so (0x00007fce39fda000)
libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007fce39dad000)
libplds4.so => /lib64/libplds4.so (0x00007fce39ba9000)
libplc4.so => /lib64/libplc4.so (0x00007fce399a4000)
libnspr4.so => /lib64/libnspr4.so (0x00007fce39765000)
libssh2.so.1 => /usr/lib64/libssh2.so.1 (0x00007fce3953d000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fce39338000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007fce3911a000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fce38f0e000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fce38d0b000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fce38af1000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fce388ed000)
liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x00007fce386de000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007fce384c4000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007fce382c0000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fce380a1000)
답변1
구체적으로 사용하는 이유는 무엇입니까 LD_PRELOAD
?
일반적으로 시스템 라이브러리 검색 경로의 표준 디렉터리에 없는 공유 라이브러리를 연결하는 Python 모듈이나 애플리케이션이 있는 경우 LD_LIBRARY_PATH
.
LD_LIBRARY_PATH
응용 프로그램 프로세스가 시작되기 전에 환경에서 설정해야 하므로 을 사용 하면 수행하는 방식에 여전히 도움이 되지 않습니다. 디렉토리 SetEnv
는 mod_wsgi에 대해 그렇게 하지 않습니다.
이 문제를 해결하기 위해 일반적으로 수행하는 작업은 이라는 다른 환경 변수를 다시 설정하는 것인데, LD_RUN_PATH
이를 필요로 하는 Python 모듈, 애플리케이션 또는 라이브러리를 컴파일할 때 설정합니다.
따라서 이를 필요로 하는 Python 모듈을 설치할 때 다음을 수행하십시오.
LD_RUN_PATH=/opt/gdal-custom/lib pip install somemodule