.. include:: links.inc .. _introduction_installation: Installation ============ .. only:: html .. contents:: Table of Contents :local: :backlinks: top Supported Platforms ------------------- *SfePy* is known to work on various flavors of recent Linux, Intel-based MacOS and Windows. The release 2019.4 was the last with Python 2.7 support. *SfePy* should work with any recent Python 3.x that is supported by `NumPy`_ and `SciPy`_. Note: Depending on Python installation and OS used, replacing ``python`` by ``python3`` might be required in all the commands below (e.g. in :ref:`compilation`) in order to use Python 3. .. _installing_sfepy: Installing SfePy ---------------- The released versions of SfePy can be installed as follows. - Using `pip`_:: pip install sfepy - Using `conda`_: #. Install `miniforge`_. The miniforge distribution contains the minimal installers for `Conda`_ and `Mamba`_ specific to `conda-forge`_. The packages are automatically pulled from the ``conda-forge`` channel. In case of a prior installation, remove the ``defaults`` channel to avoid a potential `Anaconda`_ terms of service violation:: conda config --remove channels defaults #. Install `sfepy`:: conda install sfepy The above commands pull automatically all required dependencies. This, in combination with `installing_from_sources`_, enables to try the git version easily. For example with `conda`, use:: conda remove --force sfepy to remove the installed `sfepy` package but keep the dependencies installed. If the installation succeeded, proceed with `Testing Installation`_. .. _running_sfepy_docker_images: Using SfePy Docker Images --------------------------- Besides the classical installation we also provide official Docker images with a ready-to-run miniforge-based *SfePy* installation. Before you start using *SfePy* images, you need to first install and configure Docker on your computer. To do this follow official `Docker documentation `__. Currently available all-in-one image is: - `sfepy/sfepy-desktop `__ - an Ubuntu based container containing a full desktop environment in officially supported flavors accessible via any modern web browser. For available runtime options and further information see `sfepy-docker `__ project on Github. .. _installing_from_sources: Installing SfePy from Sources ----------------------------- The latest stable release can be obtained from the `download`_ page. Otherwise, download the development version of the code from `SfePy git repository`_:: git clone git://github.com/sfepy/sfepy.git In case you wish to use a specific release instead of the latest master version, use:: git tag -l to see the available releases - the release tags have form `release_.`. See the `download`_ page for additional download options. Requirements ^^^^^^^^^^^^ Installation prerequisites, required to build *SfePy*: - a C compiler suite, - `Python`_ 3.x, - `NumPy`_, - `Cython`_. - `Cmake`_ - `scikit-build`_ - `ninja`_ Python packages required for using *SfePy*: - `Pyparsing`_, - `SciPy`_, - `meshio`_ for reading and writing mesh files, - `scikit-umfpack`_ for enabling `UMFPACK`_ solver for SciPy >= 0.14.0, - `mumpspy`_ or `python-mumps`_ for linear direct and Schur solver `MUMPS`_ - `Matplotlib`_ for various plots, - `PyTables`_ for storing results in HDF5 files, - `SymPy`_ for some tests and functions, - `igakit`_ for generating IGA domains, NumPy < 2.0 only, - `petsc4py`_ and `mpi4py`_ for running parallel examples and using parallel solvers from `PETSc`_, - `slepc4py`_ for eigenvalue problem solvers from `SLEPc`_, - `pymetis`_ for mesh partitioning using `Metis`_, - `Read the Docs`_ `Sphinx`_ theme for building documentation, - `psutil`_ for memory requirements checking, - `PyVista`_ for post-processing. Make sure the dependencies of those packages are also installed (e.g `igakit`_ reguires FORTRAN compiler, `mumpspy`_ requires `MUMPS`_ library, `scikit-umfpack`_ does not work without UMFPACK, `petsc4py`_ without PETSc etc.). All dependencies of `meshio`_ need to be installed for full mesh file format support (when using pip: ``pip install meshio[all]``). *SfePy* should work both with bleeding edge (Git) and last released versions of `NumPy` and `SciPy`. Please, submit an issue at `Issues`_ page in case this does not hold. Other dependencies/suggestions: - To be able to (re)generate the documentation `Sphinx`_, `numpydoc`_ and `LaTeX`_ are needed (see :ref:`how_to_regenerate_documentation`). - If `doxygen` is installed, the documentation of data structures and functions can be automatically generated by running:: python setup.py doxygendocs - Mesh generation tools use `gmsh` or `tetgen`. - `IPython`_ is recommended over the regular Python shell to fluently follow some parts of primer/tutorial. .. _compilation: Compilation of C Extension Modules ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In the *SfePy* top-level directory: #. Look at ``site_cfg_template.py`` and follow the instructions therein. Usually no changes are necessary. #. For in-place use, compile the extension modules:: python setup.py build_ext --inplace After a successful compilation, *SfePy* can be used in-place. However, the the ``sfepy-*`` commands, such as ``sfepy-run`` are only available after installing the package. Their functionality can be accessed by invoking directly the corresponding scripts in ``sfepy/scripts/``. Installation ^^^^^^^^^^^^ *SfePy* can be used without any installation by running its main scripts and examples from the top-level directory of the distribution or can be installed *locally* or *system-wide*: - system-wide (may require root privileges):: pip install . - local:: pip install --user . - development (editable install):: pip install -e . The editable install allows working in-place and at the same time the ``sfepy-*`` commands are available. If all went well, proceed with `Testing Installation`_. .. _testing_installation: Testing Installation -------------------- After building and/or installing *SfePy* you should check if all the functions are working properly by running the automated tests. Running Automated Test Suite ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The test suite is based on `pytest`_. Install it by:: pip install pytest or:: conda install pytest when working in `miniforge`_. If *SfePy* was installed, it can be tested using the command:: sfepy-test that accepts all of the `pytest`_ options, for example:: sfepy-test -vv --durations=0 -m 'not slow' -k test_assembling.py The tests output directory can also be specified:: sfepy-test --output-dir=output-tests In general. the tests can be run using:: python -c "import sfepy; sfepy.test()" in the *SfePy* top-level directory in case of the in-place build and anywhere else when testing the installed package. Additional `pytest`_ options can be passed as arguments to ``sfepy.test()``, for example:: python -c "import sfepy; sfepy.test('-vv', '--durations=0', '-m not slow', '-k test_assembling.py')" Analogously to ``sfepy-test``, the tests output directory can be specified using:: python -c "import sfepy; sfepy.test('--output-dir=output-tests')" See `pytest usage instructions `_ for other options and usage patterns. To test an in-place build (e.g. in a cloned git repository), the following simpler command can be used in the sources top-level directory:: python -m pytest sfepy/tests python -m pytest -v sfepy/tests/test_assembling.py which will also add the current directory to ``sys.path``. If the top-level directory is already in ``sys.path`` (e.g. using ``export PYTHONPATH=.``), the simplest way of invoking pytest is:: pytest sfepy/tests pytest -v sfepy/tests/test_assembling.py Debugging --------- If something goes wrong, edit the ``site_cfg.py`` config file and set ``debug_flags = '-DDEBUG_FMF'`` to turn on bound checks in the low level C functions, and recompile the code:: python setup.py clean python setup.py build_ext --inplace Then re-run your code and report the output to the `SfePy mailing list`_.