diff --git a/Changelog b/Changelog index 8372d02cc..3349d24aa 100644 --- a/Changelog +++ b/Changelog @@ -1,5 +1,7 @@ version 1.0.8 (not yet released) -------------------------------- +* allow shapefile to be optional, so a system version can be used + in stead of the bundled version * add 'textcolor' kwarg to drawmeridians and drawparallels (issue 145). * don't assume grid is regular when adding cyclic point in addcyclic. New kwargs 'axis' and 'cyclic' added. More than one array diff --git a/MANIFEST.in b/MANIFEST.in index f60568909..d2edc5513 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -95,10 +95,10 @@ include lib/mpl_toolkits/__init__.py include lib/mpl_toolkits/basemap/__init__.py include lib/mpl_toolkits/basemap/proj.py include lib/mpl_toolkits/basemap/pyproj.py -include lib/mpl_toolkits/basemap/shapefile.py include lib/mpl_toolkits/basemap/cm.py include lib/mpl_toolkits/basemap/solar.py include lib/mpl_toolkits/basemap/test.py +include opt_lib/mpl_toolkits/basemap/shapefile.py include doc/users/figures/*py include doc/users/*rst include doc/api/*rst diff --git a/lib/mpl_toolkits/basemap/__init__.py b/lib/mpl_toolkits/basemap/__init__.py index 68fea3de1..6fb9cdae5 100644 --- a/lib/mpl_toolkits/basemap/__init__.py +++ b/lib/mpl_toolkits/basemap/__init__.py @@ -2128,7 +2128,13 @@ def readshapefile(self,shapefile,name,drawbounds=True,zorder=None, matplotlib.patches.LineCollection object is appended to the tuple. """ import shapefile as shp - from .shapefile import Reader + try: + # try system version first + from shapefile import Reader + except ImportError: + # try bundled version as fallback + from .shapefile import Reader + shp.default_encoding = default_encoding if not os.path.exists('%s.shp'%shapefile): raise IOError('cannot locate %s.shp'%shapefile) diff --git a/lib/mpl_toolkits/basemap/shapefile.py b/opt_lib/mpl_toolkits/basemap/shapefile.py similarity index 100% rename from lib/mpl_toolkits/basemap/shapefile.py rename to opt_lib/mpl_toolkits/basemap/shapefile.py diff --git a/setup.py b/setup.py index 8b804cd89..0bf6d530a 100644 --- a/setup.py +++ b/setup.py @@ -81,6 +81,29 @@ def checkversion(GEOS_dir): geos_include_dirs=[os.path.join(GEOS_dir,'include'),inc_dirs] geos_library_dirs=[os.path.join(GEOS_dir,'lib'),os.path.join(GEOS_dir,'lib64')] +# get location of pyshp lib from environment variable if it is set. +if 'PYSHP_DIR' in os.environ: + PYSHP_dir = os.environ.get('PYSHP_DIR') +else: + # set PYSHP_DIR to None if not defined by the user + PYSHP_dir = None + +if PYSHP_dir: + if not PYSHP_dir in sys.path: + sys.path.append(PYSHP_dir) + try: + import shapefile + except ImportError: + raise SystemExit(""" +Could not import shapefile!' +Please make sure the pyshp module is installed and set the PYSHP_DIR +environment variable to point to the proper location. +Alternatively, you may choose to not define the PYSHP_DIR environment +variable, in which case the bundled copy of pyshp will be used. +""") +else: + pass + # proj4 and geos extensions. deps = glob.glob('src/*.c') deps.remove(os.path.join('src','_proj.c')) @@ -89,6 +112,13 @@ def checkversion(GEOS_dir): packages = ['mpl_toolkits','mpl_toolkits.basemap'] namespace_packages = ['mpl_toolkits'] package_dirs = {'':'lib'} + +if PYSHP_dir is None: + # copy shapefile into basemap dir + import shutil + shutil.copy('opt_lib/mpl_toolkits/basemap/shapefile.py', + 'lib/mpl_toolkits/basemap/shapefile.py') + extensions = [Extension("mpl_toolkits.basemap._proj",deps+['src/_proj.c'],include_dirs = ['src'],)] # can't install _geoslib in mpl_toolkits.basemap namespace, # or Basemap objects won't be pickleable. @@ -165,3 +195,7 @@ def checkversion(GEOS_dir): cmdclass = {'build_py': build_py}, package_data = package_data ) + +# clean up afterwards +if PYSHP_dir is None: + os.remove('lib/mpl_toolkits/basemap/shapefile.py') diff --git a/utils/readboundaries_shp.py b/utils/readboundaries_shp.py index 6beb5120f..a641ee7db 100644 --- a/utils/readboundaries_shp.py +++ b/utils/readboundaries_shp.py @@ -1,5 +1,10 @@ import numpy as np -from mpl_toolkits.basemap.shapefile import Reader +try: + # try system version first + from shapefile import Reader +except ImportError: + # try bundled version as fallback + from mpl_toolkits.basemap.shapefile import Reader lsd = 5