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 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-packages
directory. Therefore during the build Spheral creates aPYTHONENV
list of each of the packages respective directories and calls the python executable with thePYTHONENV
variable 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>_DIR
and<package_name>_BUILD
this 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
.tar
files are still saved to the${CACHE_DIR}
and all install commands check this directory for previously downloaded.tar
files.
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.