This is an optional module that adds Python support in Chrono.
The PYTHON module allows users to use Python for creating simulations. As with any scripting language, this allows for immediate execution, no compilers involved, simple to use, etc. This module is used to build the Chrono::PyEngine wrapper.
This module consists of two main sets of build targets:
- The Python modules for Chrono::PyEngine. Currently, the PyChrono Python modules that are built are:
- ChronoEngine_PYTHON_core, that wraps all the core Chrono,
- ChronoEngine_PYTHON_postprocess, that wraps the POSTPROCESS module.
- ChronoEngine_PYTHON_irrlicht, that wraps the IRRLICHT module.
- ChronoEngine_PYTHON_fea, that wraps the FEA module.
- A PYPARSER module is built, that is a C++ module for parsing / executing / interpreting Python instructions from C++ programs.
- To run applications based on this module:
- you must have Python installed.
- To build this module:
- Install SWIG on your system. Version 3.0.12 or higher is required. (on Windows, just unzip where you want).
- Repeat the instructions for the full installation, but when you see the CMake window, you must add the following steps:
- Set the
ENABLE_MODULE_PYTHONas 'on', then press 'Configure' (to refresh the variable list)
- If prompted, set the
CH_PYTHONDIRvariable to the directory where you have your copy of Python. For example, it could be
- When you pressed 'Configure', CMake should have detected your SWIG tools. This should create two variables in CMake called
SWIG_EXECUTABLE. If all is fine, they should automatically contain meaningful values, for example
C:/swigwin-3.0.12/swig.exe, so you do not need to touch them. (On Windows, you may need to set them by hand).
- Press 'Configure' again, then 'Generate', and proceed as usual in the installation instructions.
If you have multiple Python installations on the same machine, you may need to explicitly specify which one to use in the call to CMake. For example, under Linux:
% ccmake -DPYTHON_EXECUTABLE:FILEPATH=/usr/local/python/3.6.0/bin/python3 -DPYTHON_LIBRARY=/usr/local/python/3.6.0/lib/libpython3.so -DPYTHON_INCLUDE_DIR=/usr/local/python/3.6.0/include ../../chrono
After successful compilation, the Chrono::PyEngine modules can be used either from the BUILD tree or, after installation, from the INSTALL tree. In order for the generated Python modules to be accessible, you must set/append to the
PYTHONPATH environment variable. During configuration, the Chrono CMake script will output the proper paths to be used in setting the PYTHONPATH environment variables; for example:
Setting/changing environment variables is platform-specific.
- On Windows, you can (globally) set environment variables in 'Control Panel -> System -> Advanced system settings':
- On Linux, using bash shell:
PYTHONPATH, you can add the above to your .bashrc file (or the appropriate initialization file for your shell).
- C++ functions (as Python parser)
- Python functions (as Chrono::PyEngine )
The build process of the Python modules, as generated by CMake, consists of these automatic steps:
- SWIG preprocesses C++ source code files in order to generate a .cxx wrapper file that contains the code for accessing C++ functions through the API, and some .py files,
- the C++ compiler compiles the .cxx file and generates one or more library files,
- the SWIG-generated files (*.py) and resulting library files (*.pyd on Windows and *.so on Linux) are collected in a single location in the BUILD tree, so that they can be used directly from there. Similarly, after installation, all Chrono::Python modules are copied in a single location in the INSTALL tree. See the comments above about these exact locations for your particular configuration and about setting the
- Comment out the line:
#if defined(_DEBUG) #pragma comment(lib,"python33_d.lib")
#if defined(_DEBUG) #pragma comment(lib,"python33.lib")
- Press 'Advanced' in CMake, set the PYTHON_DEBUG_LIBRARY to the same lib that you have in PYTHON_LIBRARY, and press 'Generate' so that your project will link 'python33.lib' instead than 'python33_d.lib'.