1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
from distutils.core import setup, Extension
from distutils.command.build import build
import os
import fnmatch
import sys
import imp
import re
import subprocess
def find_package_data_files(directory):
for root, dirs, files in os.walk(directory):
for basename in files:
if fnmatch.fnmatch(basename, '*'):
filename = os.path.join(root, basename)
# if filename.find('/.svn') > -1:
# continue
yield filename.replace('cf/', '', 1)
## Check that the dependencies are met
#for _module in ('netCDF4', 'numpy'):
# try:
# imp.find_module(_module)
# except ImportError as error:
# raise ImportError("Missing dependency. cf requires package %s. %s" %
# (_module, error))
##--- End: for
#
def _read(fname):
"""Returns content of a file.
"""
fpath = os.path.dirname(__file__)
fpath = os.path.join(fpath, fname)
with open(fpath, 'r') as file_:
return file_.read()
def _get_version():
"""Returns library version by inspecting __init__.py file.
"""
return re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]',
_read("cf/__init__.py"),
re.MULTILINE).group(1)
version = _get_version()
packages = ['cf']
etc_files = [f for f in find_package_data_files('cf/etc')]
umread_files = [f for f in find_package_data_files('cf/um/umread/c-lib')]
package_data = etc_files + umread_files
class build_umread(build):
'''
Adpated from https://github.com/Turbo87/py-xcsoar/blob/master/setup.py
'''
def run(self):
# Run original build code
build.run(self)
# Build umread
print 'Running build_umread'
build_dir = os.path.join(os.path.abspath(self.build_lib), 'cf/um/umread/c-lib')
cmd = ['make', '-C', build_dir]
rc = subprocess.call(cmd)
def compile():
print '*' * 80
print 'Running:', ' '.join(cmd), '\n'
rc = subprocess.call(cmd)
print '\n', '-' * 80
if not rc:
print 'SUCCESSFULLY BUILT UM read C library'
else:
print 'WARNING: Errors during build of UM read C library will cause failures with UKMO PP and UM format files'
print 'HOWEVER: This will not affect any other cf-python functionality'
#--- End: if
print '-' * 80, '\n'
print '*' * 80
print
print "cf build successful"
print
#--- End: def
self.execute(compile, [], 'compiling umread')
#--- End: class
#with open('README.md') as ldfile:
# long_description = ldfile.read()
long_description = """Home page
=========
* `cf-python <http://cfpython.bitbucket.org>`_
Documentation
=============
* `Online documentation for the latest stable release
<http://cfpython.bitbucket.org/docs/latest/>`_
Dependencies
============
* The package runs on Linux and Mac OS operating systems.
* Requires a python version from 2.6 up to, but not including, 3.0.
* See the `README.md
<https://bitbucket.org/cfpython/cf-python/src/master/README.md>`_
file for further dependencies
Visualisation
=============
* The `cfplot package <https://pypi.python.org/pypi/cf-plot>`_ at
version 1.9.10 or newer provides metadata-aware visualisation for
cf-python fields. This is not a dependency for cf-python.
Command line utilities
======================
* The `cfdump` tool generates text representations on standard output
of the CF fields contained in the input files.
* The `cfa` tool creates and writes to disk the CF fields contained in
the input files.
* During installation these scripts will be copied automatically to a
location given by the ``PATH`` environment variable.
Code license
============
* `MIT License <http://opensource.org/licenses/mit-license.php>`_"""
setup(name = "cf-python",
long_description = long_description,
version = version,
description = "Python interface to the CF data model",
author = "David Hassell",
maintainer = "David Hassell",
maintainer_email = "d.c.hassell at reading.ac.uk",
author_email = "d.c.hassell at reading.ac.uk",
url = "http://cfpython.bitbucket.org/",
download_url = "https://bitbucket.org/cfpython/cf-python/downloads",
platforms = ["Linux", "MacOS"],
keywords = ['cf','netcdf','data','science',
'oceanography','meteorology','climate'],
classifiers = ["Development Status :: 5 - Production/Stable",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
"Topic :: Scientific/Engineering :: Mathematics",
"Topic :: Scientific/Engineering :: Physics",
"Topic :: Scientific/Engineering :: Atmospheric Science",
"Topic :: Utilities",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS"
],
packages = ['cf',
'cf.um',
'cf.um.umread',
'cf.data',
'cf.netcdf'],
package_data = {'cf': package_data},
scripts = ['scripts/cfa',
'scripts/cfdump'],
requires = ['netCDF4 (>=1.1.1)',
'numpy (>=1.7)',
'matplotlib (>=1.4.2)',
'psutil (>=0.6.0)',
],
cmdclass = {'build': build_umread}, #https://docs.python.org/2/distutils/apiref.html
)
|