Não consigo adaptar esta pergunta para mod_wsgi.
Eu tenho um aplicativo python flask que usa gdal. Começo da seguinte maneira:
LD_PRELOAD=/opt/gdal-custom/lib/libgdal.so.1 PYTHONPATH=../somemodules/ scl enable python27 "source ../python27/bin/activate; python flaskapp.py"
No entanto, gostaria de hospedá-lo no mod_wsgi. Fazer LD_PRELOAD=/opt/gdal-custom/lib/libgdal.so.1 service httpd24-httpd restart
não parece funcionar. Nem definir o seguinte na minha configuração do 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>
Aqui está a saída do 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)
Responder1
Por que você está usando LD_PRELOAD
especificamente?
Normalmente, se você tiver um módulo ou aplicativo Python que vincule uma biblioteca compartilhada que não esteja em um diretório padrão no caminho de pesquisa da biblioteca do sistema, você usaria LD_LIBRARY_PATH
.
O uso LD_LIBRARY_PATH
ainda não ajudará na maneira como você está fazendo isso, pois qualquer um deles deve ser definido no ambiente antes do início do processo de aplicação. O SetEnv
diretório não faz isso para mod_wsgi.
O que você normalmente faria para contornar esse problema é definir novamente uma variável de ambiente diferente, chamada LD_RUN_PATH
, mas configurá-la no momento em que estiver compilando o módulo Python, aplicativo ou biblioteca que a requer.
Assim, ao instalar o módulo Python que exige isso, faça:
LD_RUN_PATH=/opt/gdal-custom/lib pip install somemodule