pycsw is written in Python, and works with (tested) version 2.6, 2.7 and 3.4
pycsw requires the following Python supporting libraries:
- lxml for XML support
- SQLAlchemy for database bindings
- pyproj for coordinate transformations
- Shapely for spatial query / geometry support
- OWSLib for CSW client and metadata parser
- six for Python 2/3 compatibility
- xmltodict for working with XML similar to working with JSON
- geolinks for dealing with geospatial links
Installing from Source¶
Download the latest stable version or fetch from Git.
For Developers and the Truly Impatient¶
The 4 minute install:
$ virtualenv pycsw && cd pycsw && . bin/activate $ git clone https://github.com/geopython/pycsw.git && cd pycsw $ pip install -e . && pip install -r requirements-standalone.txt $ cp default-sample.cfg default.cfg $ vi default.cfg # adjust paths in # - server.home # - repository.database # set server.url to http://localhost:8000/ $ python pycsw/wsgi.py $ curl http://localhost:8000/?service=CSW&version=2.0.2&request=GetCapabilities
The Quick and Dirty Way¶
$ git clone git://github.com/geopython/pycsw.git
Ensure that CGI is enabled for the install directory. For example, on Apache, if pycsw is installed in
/srv/www/htdocs/pycsw (where the URL will be
http://host/pycsw/csw.py), add the following to
<Location /pycsw/> Options +FollowSymLinks +ExecCGI Allow from all AddHandler cgi-script .py </Location>
If pycsw is installed in
cgi-bin, this should work as expected. In this case, the tests application must be moved to a different location to serve static HTML documents.
Make sure, you have all the dependencies from
requirements.txt and requirements-standalone.txt
The Clean and Proper Way¶
$ git clone git://github.com/geopython/pycsw.git $ python setup.py build $ python setup.py install
At this point, pycsw is installed as a library and requires a CGI
pycsw/wsgi.py script to be served into your web server environment
(see below for WSGI configuration/deployment).
Installing from the Python Package Index (PyPi)¶
# easy_install or pip will do the trick $ easy_install pycsw # or $ pip install pycsw
Installing from OpenSUSE Build Service¶
In order to install the pycsw package in openSUSE Leap (stable distribution), one can run the following commands as user
# zypper -ar http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/ GEO # zypper refresh # zypper install python-pycsw pycsw-cgi
In order to install the pycsw package in openSUSE Tumbleweed (rolling distribution), one can run the following commands as user
# zypper -ar http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Tumbleweed/ GEO # zypper refresh # zypper install python-pycsw pycsw-cgi
An alternative method is to use the One-Click Installer.
Installing on Ubuntu/Mint¶
In order to install the most recent pycsw release to an Ubuntu-based distribution, one can use the UbuntuGIS Unstable repository by running the following commands:
# sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable # sudo apt-get update # sudo apt-get install python-pycsw pycsw-cgi
Alternatively, one can use the UbuntuGIS Stable repository which includes older but very well tested versions:
# sudo add-apt-repository ppa:ubuntugis/ppa # sudo apt-get update # sudo apt-get install python-pycsw pycsw-cgi
Since Ubuntu 16.04 LTS Xenial release, pycsw is included by default in the official Multiverse repository.
Running on Windows¶
For Windows installs, change the first line of
The use of
-u is required to properly output gzip-compressed responses.
default.cfg is at the root of the pycsw install. If pycsw is setup outside an HTTP server’s
cgi-bin area, this file could be read. The following options protect the configuration:
default.cfgto a non HTTP accessible area, and modify
csw.pyto point to the updated location
- configure web server to deny access to the configuration. For example, in Apache, add the following to
<Files ~ "\.(cfg)$"> order allow,deny deny from all </Files>
Running on WSGI¶
pycsw supports the Web Server Gateway Interface (WSGI). To run pycsw in
WSGI mode, use
pycsw/wsgi.py in your WSGI server environment.
mod_wsgi supports only the version of python it was compiled with. If the target server
already supports WSGI applications, pycsw will need to use the same python version.
WSGIDaemonProcess provides a
python-path directive that may allow a virtualenv created from the python version
Below is an example of configuring with Apache:
WSGIDaemonProcess host1 home=/var/www/pycsw processes=2 WSGIProcessGroup host1 WSGIScriptAlias /pycsw-wsgi /var/www/pycsw/wsgi.py <Directory /var/www/pycsw> Order deny,allow Allow from all </Directory>
or use the WSGI reference implementation:
$ python ./pycsw/wsgi.py Serving on port 8000...
which will publish pycsw to