2

I am trying to use the QGIS functions in a stand alone Python script. I'm running Mountain Lion OS, 2.7 Python & the QQGISis 2.0.1 Dufour.

My main problem is that I cannot get started - I cannot load a simple shapefile in order to buffer it. After searching the online resources quite a bit, I actually found that many people had a problem with setting the prefix path, so I ran the QgsApplication.showSettings() to identify it.

The code I'm running now is:

 QgsApplication.setPrefixPath("/Applications/QGIS.app/Contents", True) 
 QgsApplication.initQgis() 
 print QgsApplication.showSettings() 
 #Loading a Layer 
 layer = QgsVectorLayer('/path/to/shapefile_folder/test.shp', 'test', 'ogr')
 if not layer.isValid(): 
 print "The layer failed to load." 
 #finally I d like to apply a buffer, sth like that maybe? 
 buffer_Shp = layer.buffer(10, 5) 

Here is the result I get:

 Application state:
 QGIS_PREFIX_PATH env var: 
 Prefix: /Applications/QGIS.app/Contents
 Plugin Path: /Applications/QGIS.app/Contents/../PlugIns/qgis
 Package Data Path: /Applications/QGIS.app/Contents/../Resources
 Active Theme Name: 
 Active Theme Path: :/images/themes//
 Default Theme Path: :/images/themes/default/
 SVG Search Paths: /Applications/QGIS.app/Contents/../Resources/svg/
 User DB Path: /Applications/QGIS.app/Contents/../Resources/resources/qgis.db

"The Layer Failed to load" (obviously)

bash_profile (in case that sth is wrong there)

 /# Setting PATH for Python 2.7
 /# The orginal version is saved in .bash_profile.pysave
 /######export PYTHONPATH=/usr/local/lib/python:$PYTHONPATH
 export PATH=/usr/local/bin:$PATH
 export PATH=/usr/local/share/python:$PATH 
 /#adding Qgis libs 
 export DYLD_LIBRARY_PATH=/Applications/QGIS.app/Contents/MacOS/lib/:/Applications/QGIS.app/Contents/Frameworks/
 export PYTHONPATH=/Applications/QGIS.app/Contents/Resources/python/
 export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH
 /# Added by Canopy installer on 2013年10月06日
 /# VIRTUAL_ENV_DISABLE_PROMPT can be set to '' to make bashprompt show that Canopy is active, otherwise 1
 /# VIRTUAL_ENV_DISABLE_PROMPT=1 source /Users/george/Library/Enthought/Canopy_64bit/User/bin/activate

What the heck am I missing?

nmtoken
13.6k5 gold badges39 silver badges91 bronze badges
asked Oct 28, 2013 at 23:44

1 Answer 1

3

There are a couple of things you may want to look at concerning your code:

  1. If you are actually trying to load the shapefile from '/path/to/shapefile_folder/test.shp' then there is a high likelihood that a shapfile does not exist at that location.

  2. Set the prefixPath to '/Applications/QGIS.app/Contents/MacOS'. Notice if you look inside the application bundle, the following path from your QgsApplication.showSettings() is invalid: /Applications/QGIS.app/Contents/../PlugIns/qgis. You may not have to set it at all; try printing it out first, to see if it is already valid. If setting the correct path does not work, please file a issue ticket.

  3. You may not have to set anything other than the prefixPath, excepting PYTHONPATH, as noted in the Kyngchaos README:

    export PATH="/Applications/QGIS.app/Contents/MacOS/bin:$PATH"

    export PYTHONPATH="/Applications/QGIS.app/Contents/Resources/python"

    If you already have something in PYTHONPATH, add it instead with:

    export PYTHONPATH="/Applications/QGIS.app/Contents/Resources/python:$PYTHONPATH"

    Try not setting DYLD_LIBRARY_PATH, first. If that does not work, try setting only the following:

    DYLD_LIBRARY_PATH=/Applications/QGIS.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH

    Setting DYLD_FRAMEWORK_PATH can help if you have two or more versions of Qt installed on your system. This ensures the PyQt modules imported from the app bundle match with QgsApplication's:

    DYLD_FRAMEWORK_PATH=/Applications/QGIS.app/Contents/Frameworks

    Append/prepend PATH relative to the command line utilities you may wish to access from your Python script, e.g. via subprocess module.

    OF NOTE: nothing you set in your .bash_profile will be used by the Finder-launched QGIS.app, since GUI apps, by default, do not inherit that environment. You can affect QGIS.app in other ways provided by Apple, or by setting environment variables in the main Options of QGIS>= 2.0 (though not all variables can be successfully set there).

  4. You seem to be using a custom Python install in /usr/local. The Kyngchaos.com QGIS.app is specifically built against Apple's default Mac OS X Python for 10.8 (Python 2.7.x). Different Python installs can only be supported through manual compiling of QGIS source code, unless using something like homebrew or MacPorts. It is best to use the default Python in your standalone script, when leveraging the Kyngchaos.com QGIS.app install Python components.

answered Oct 29, 2013 at 1:44

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.