abipy/setup.py

232 lines
6.4 KiB
Python
Executable File

#!/usr/bin/env python
"""Setup script for abipy."""
from __future__ import print_function
import sys
import os
import shutil
from glob import glob
from setuptools import find_packages, setup, Extension
# This check is also made in abipy/__init__, don't forget to update both when
# changing Python version requirements.
if sys.version[0:3] < '2.7':
sys.stderr.write("abipy requires Python version 2.7 or above. Exiting.")
sys.exit(1)
ext_modules = []
#-------------------------------------------------------------------------------
# Useful globals and utility functions
#-------------------------------------------------------------------------------
# A little utility we'll need below, since glob() does NOT allow you to do exclusion on multiple endings!
def file_doesnt_end_with(test, endings):
"""
Returns true if test is a file and its name does NOT end with any
of the strings listed in endings.
"""
if not os.path.isfile(test):
return False
for e in endings:
if test.endswith(e):
return False
return True
#---------------------------------------------------------------------------
# Basic project information
#---------------------------------------------------------------------------
# release.py contains version, authors, license, url, keywords, etc.
release_file = os.path.join('abipy','core','release.py')
with open(release_file) as f:
code = compile(f.read(), release_file, 'exec')
exec(code)
#---------------------------------------------------------------------------
# Find packages
#---------------------------------------------------------------------------
#
#def find_packages():
# """
# Find all of abipy's packages.
# """
# return find_packages(exclude=())
#---------------------------------------------------------------------------
# Find package data
#---------------------------------------------------------------------------
def find_package_data():
"""Find abipy's package_data."""
#top = os.path.join("abipy", "data", "refs")
#ref_files = {}
#for root, dirs, files in os.walk(top):
# root = root.replace("/", ".")
# ref_files[root] = [os.path.join(root, f) for f in files]
#print(ref_files)
# This is not enough for these things to appear in an sdist.
# We need to muck with the MANIFEST to get this to work
package_data = {
'abipy.data': [
"cifs/*.cif",
"pseudos/*",
"hgh_pseudos/*",
"runs/*",
"managers/*",
"refs/*.nc",
"refs/*.log",
"refs/*.abo",
],
'abipy.data.refs' : [
"al_eph/*",
"al_g0w0_spfunc/*",
"alas_nl_dfpt/*",
"alas_phonons/*",
#"diamond_sigeph/*",
"gaas_optic/*",
"mgb2_fatbands/*",
"ni_ebands/*",
"si_bse/*",
"si_bse_kpoints/*",
"si_ebands/*",
"si_g0w0/*",
"sio2_screening/*",
"znse_phonons/*",
],
'abipy.gui.awx' : ['images/*'],
}
return package_data
def find_exclude_package_data():
package_data = {
'abipy.data': ["managers", 'benchmarks', 'runs/flow_*', 'runs/gspert'],
}
return package_data
#---------------------------------------------------------------------------
# Find scripts
#---------------------------------------------------------------------------
def find_scripts():
"""Find abipy scripts."""
scripts = []
# All python files in abipy/scripts
pyfiles = glob(os.path.join('abipy', 'scripts', "*.py"))
scripts.extend(pyfiles)
return scripts
def get_long_desc():
with open("README.rst") as f:
return f.read()
return long_desc
#-----------------------------------------------------------------------------
# Function definitions
#-----------------------------------------------------------------------------
def cleanup():
"""Clean up the junk left around by the build process."""
if "develop" not in sys.argv:
try:
shutil.rmtree('abipy.egg-info')
except (IOError, OSError):
try:
os.unlink('abipy.egg-info')
except:
pass
# List of external packages we rely on.
# Note setup install will download them from Pypi if they are not available.
#with open("requirements.txt", "rt") as fh:
# install_requires = [s.strip() for s in fh]
install_requires = [
"six",
"prettytable",
"tabulate",
"apscheduler==2.1.0",
"pydispatcher>=2.0.5",
"tqdm",
"html2text",
"pyyaml>=3.11",
"pandas",
"numpy",
"scipy",
"spglib",
"pymatgen>=2018.6.11",
"netCDF4",
"matplotlib",
"seaborn",
]
with_wxpython = False
if with_wxpython:
install_requires += [
"wxmplot",
"wxpython",
]
#---------------------------------------------------------------------------
# Find all the packages, package data, and data_files
#---------------------------------------------------------------------------
# Create a dict with the basic information
# This dict is eventually passed to setup after additional keys are added.
setup_args = dict(
name=name,
version=version,
description=description,
long_description=long_description,
long_description_content_type="text/x-rst",
author=author,
author_email=author_email,
maintainer=maintainer,
maintainer_email=maintainer_email,
url=url,
license=license,
platforms=platforms,
keywords=keywords,
classifiers=classifiers,
install_requires=install_requires,
packages=find_packages(exclude=()),
package_data=find_package_data(),
exclude_package_data=find_exclude_package_data(),
scripts=find_scripts(),
download_url=download_url,
ext_modules=ext_modules,
)
if __name__ == "__main__":
setup(**setup_args)
print("""
Please read the following if you are about to use AbiPy for the first time:
Abipy needs to know about the cluster/computer you are running on. This information
is provided via the manager.yml and scheduler.yml files.
These files must be located in ~/.abinit/abipy or in the working directory in which you execute the flow.
Examples are provided in abipy/data/managers.
See also the HTML page:
http://abinit.github.io/abipy/workflows/manager_examples.html
TIP: Use abicheck.py to validate the final configuration.
Have fun!
""")
cleanup()