Try setting QGIS_PREFIX_PATH=/usr Then make sure the path to the QGIS libs is either configured in ld.so.conf.d/ or LD_LIBRARY_PATH
In my case, I have QGIS installed in /home/gsherman/qgis_master and this sequence works: >From the shell: export LD_LIBRARY_PATH=/home/gsherman/qgis_master/lib export QGIS_PREFIX_PATH=/home/gsherman/qgis_master export PYTHONPATH=/home/gsherman/qgis_master/share/qgis/python In Python: app = QgsApplication(['/home/gsherman/qgis_master'], False) app.initQgis() for provider in QgsProviderRegistry.instance().providerList(): print provider ...: WFS delimitedtext gdal gpx memory mssql ogr osm ows postgres spatialite sqlanywhere wcs wms On Mon, Feb 25, 2013 at 12:45 AM, Nils Olaf de Reus <nils.de.r...@gmail.com>wrote: > Hi everyone, > > When trying to use the qgis libraries from an external script (that > is, a script running not within the context of the embedded console of > QGIS), I get only a severely limited selection of available data > providers. A number of libraries that load fine from inside the > context of QGIS' embedded python console, fail to load when initQgis > is used from a standalone external script. > > I have a Linux 2.6.32-5-amd64 x86_64 GNU/Linux platform, running > Debian Squeeze and the 1.8 release of QGIS for Squeeze from the > official repository at http://qgis.org/debian. To test if the problem > described below still existed with a newer version of QGIS, I created > a clean Debian Squeeze chroot environment, and installed the latest > nightly build. The problem still existed with the nightly, same as in > the 1.8 release. > > > The provider lib files are present in the usual plugin directory: > > nils@fennek:~$ ls /usr/lib/qgis/plugins > libcoordinatecaptureplugin.so libmemoryprovider.so > libdelimitedtextplugin.so libmssqlprovider.so > libdelimitedtextprovider.so libofflineeditingplugin.so > libdiagramoverlay.so libogrprovider.so > libdxf2shpconverterplugin.so liboracleplugin.so > libevis.so libosmprovider.so > libgdalprovider.so libpostgresprovider.so > libgeorefplugin.so librasterterrainplugin.so > libgpsimporterplugin.so libroadgraphplugin.so > libgpxprovider.so libspatialiteprovider.so > libgrassplugin.so libspatialqueryplugin.so > libgrassprovider.so libspitplugin.so > libgrassrasterprovider.so libwfsprovider.so > libheatmapplugin.so libwmsprovider.so > libinterpolationplugin.so libzonalstatisticsplugin.so > > > My external script goes through the usual steps, shown below in an > interactive session for easy replication: > > nils@fennek:~$ python > Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) > [GCC 4.4.5] on linux2 > Type "help", "copyright", "credits" or "license" for more information. > >>> from qgis.core import * > >>> app = QgsApplication([u'/usr'], False) > >>> print app.showSettings() > Application state: > Prefix: /usr > Plugin Path: /usr/lib/qgis/plugins > Package Data Path: /usr/share/qgis > Active Theme Name: > Active Theme Path: :/images/themes// > Default Theme Path: :/images/themes/default/ > SVG Search Paths: /usr/share/qgis/svg/ > /home/nils/.qgis//svg/ > User DB Path: /usr/share/qgis/resources/qgis.db > > >>> app.initQgis() > > Now if I check which providers are there, I only get three.. > > >>> for provider in QgsProviderRegistry.instance().providerList(): > ... print provider > ... > delimitedtext > gdal > gpx > > > ..while that exact same statement inside Qgis' embedded Python Console > yields all thirteen providers: > > >>> for provider in QgsProviderRegistry.instance().providerList(): > ... print provider > ... > WFS > delimitedtext > gdal > gpx > grass > grassraster > memory > mssql > ogr > osm > postgres > spatialite > wms > > > Sofar, I've traced it to the point where during initQgis(), the > creation of the QgsProviderRegistry will reject those libraries that > return False on the test if QLibrary's load() method will succesfully > load them. This too can be shown from the interactive python console. > First in the external console: > > >>> from PyQt4 import QtCore > >>> > QtCore.QLibrary(u'/usr/lib/qgis/plugins/libdelimitedtextprovider.so').load() > True > >>> QtCore.QLibrary(u'/usr/lib/qgis/plugins/libgdalprovider.so').load() > True > >>> QtCore.QLibrary(u'/usr/lib/qgis/plugins/libgpxprovider.so').load() > True > >>> QtCore.QLibrary(u'/usr/lib/qgis/plugins/libogrprovider.so').load() > False > >>> > QtCore.QLibrary(u'/usr/lib/qgis/plugins/libspatialiteprovider.so').load() > False > >>> > > ..well, I think you see the pattern. Outside of those three > ('delimitedtext', 'gpx' and 'gdal'), QLibrary doesn't seem able to > load any of the other provider libraries. > > Now my first guess when QLibrary can't load a library would be that > something is wrong with that library. Except of course that when these > same commands are issued inside the embedded console under Qgis, these > same libs load fine: > > >>> from PyQt4 import QtCore > >>> > QtCore.QLibrary(u'/usr/lib/qgis/plugins/libdelimitedtextprovider.so').load() > True > >>> QtCore.QLibrary(u'/usr/lib/qgis/plugins/libgdalprovider.so').load() > True > >>> QtCore.QLibrary(u'/usr/lib/qgis/plugins/libgpxprovider.so').load() > True > >>> QtCore.QLibrary(u'/usr/lib/qgis/plugins/libogrprovider.so').load() > True > >>> > QtCore.QLibrary(u'/usr/lib/qgis/plugins/libspatialiteprovider.so').load() > True > >>> > > > I've tried making my sys.path identical between the embedded and > external python sessions. No effect. > > I didn't see any obvious systematic problems with the libraries that > didn't load (I focussed on libmemoryprovider, because that one is > relatively simple), and neither in the ldd nor readelf outputs did > anything stand out as an obvious red flag. (I say 'obvious red flag' > because I lack the expertise to properly understand even half the > things that come out of readelf, and can only look for a limited > number of 'telltale signs') > > So.. what am I missing? Is there some other library that Qgis preloads > that makes the loading of the other dynamically linked providers work? > And how can I get that to also happen from a regular python script not > inside the embedded python console? > > > Kind regards, > Nils > _______________________________________________ > Qgis-user mailing list > Qgis-user@lists.osgeo.org > http://lists.osgeo.org/mailman/listinfo/qgis-user > -- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- Gary Sherman Chair, QGIS Project Steering Committee -Desktop GIS Book: *http://desktopgisbook.com -Alaska Novel: *http://alaskana.co -Geospatial Consulting & Hosting: *http://geoapt.com "We work virtually everywhere" -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
_______________________________________________ Qgis-user mailing list Qgis-user@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-user