Python Module Installation Strategy
The full list of Spherals python module dependencies:
python==2.7.18
pip==9.0.1
setuptools
wheel
virtualenv==20.2.2
pyb11generator==1.0.12
sphinx==1.8.5
sphinx_rtd_theme==0.5.0
docutils==0.17.1
numpy==1.16.6
numpy-stl==2.11.2
matplotlib==2.2.5
decorator==4.4.2
h5py==2.10.0
twine==1.15.0
cython==0.29.21
sobol==0.9
scipy==1.2.3
pipreqs==0.4.10
importlib_metadata==2.1.1
mpi4py==3.3.0
gnuplot==1.8
ats==5.2
However many of these are not required to actually build Spheral, they are purely dependencies of the Spheral python interface.
Build Time Packages
These packages are always required when building the Spheral python interface:
python==2.7.18
pip==9.0.1
setuptools==?
wheel==?
virtualenv==20.2.2
pyb11generator==1.0.12
Optionally if we are building Spheral with SPHERAL_ENABLE_DOCS=On we will need:
sphinx==1.8.5
sphinx_rtd_theme==0.5.0
docutils==0.17.1
Implementation
These packages are used during the build as they are necessary utilities to compile Spheral source code and other targets.
Each package is designed to be install / used from a directory outside of the python
site-packagesdirectory. Therefore during the build Spheral creates aPYTHONENVlist of each of the packages respective directories and calls the python executable with thePYTHONENVvariable as necessary.
CMake Interface
With the new python package management system we expose these python packages the same way we expose other TPL dependencies in Spheral. They can be enabled and disabled through CMake options
<package_name>_DIRand<package_name>_BUILDthis is useful as we move towards a Spack based TPL system where python packages are treated as separate dependencies from a given python installation.
e.g. Using a locally built / installed version of a pyb11generator package
cmake ..... -Dpyb11generator_BUILD=Off -Dpyb11generator_DIR=/<local_pyb11gen_site_package_dir>
Runtime Packages
numpy==1.16.6
numpy-stl==2.11.2
matplotlib==2.2.5
decorator==4.4.2
h5py==2.10.0
twine==1.15.0
cython==0.29.21
sobol==0.9
scipy==1.2.3
pipreqs==0.4.10
importlib_metadata==2.1.1
The above packages are always required by Spheral at runtime and are added to a requirements.txt file that is generated during the CMake configuration stage. If ENABLE_MPI=On then mpi4py is also added to this list of packages.
The generated requirements.txt file is used in the spheral-setup-env.sh script to install these directly to the Spheral virtual environment we create.
Note : To continue to support off-line installations, all package
.tarfiles are still saved to the${CACHE_DIR}and all install commands check this directory for previously downloaded.tarfiles.
Custom Runtime Packages
gnuplot==1.8
ats==5.2
These packages do not have Pypi versions of themselves and are therefore installed alongside the Runtime Packages in the Spheral virtual environment setup script.
Spack Integration
As we move to a Spack based TPL system it is useful to mimic the separation of python and python-package installs. This system allows us to expose our build time python dependencies for Spack to handle. However once we are past the build stage of Spheral we do not want Spack to manage our runtime dependencies as that requires users to use Spack as an interface to Spheral: launching the spack environment, loading the spack/spheral module, dirtying the users environment etc. This approach lets us control the Spheral runtime environment by continuing to providing a ./spheral command at the install directory.