Installing Lpy
##############

``L-Py`` distribution is based on the ``conda`` software environment management system.
To install conda, you may refer to its installation page: https://docs.conda.io/projects/conda/en/latest/user-guide/install/



Installing binaries using conda
================================


To install L-Py, you need to create an environment (named lpy in this case) :

.. code-block:: bash

        conda create -n lpy openalea.lpy -c openalea3 -c conda-forge

Then, you need to activate the L-Py environment

.. code-block:: bash

        conda activate lpy

And then run L-Py

.. code-block:: bash

        lpy


Installing from sources
=======================

You should first install all dependencies in a conda environment. The simplest way to do this is to call

.. code-block:: bash
    
    conda create -n lpydev 
    conda activate lpydev
    conda install --only-deps openalea.lpy -c openalea3 -c conda-forge
    conda install 

You should clone the lpy project into your computer

.. code-block:: bash
    
    git clone https://github.com/openalea/lpy.git


Compiling on macOS and Linux
=================

This assumes you installed the usual build tools on Linux, or the Xcode Build Tools on macOS.

You need then to compile lpy with the following command, on macOS and Linux:

.. code-block:: bash
        
        mkdir build ; cd build
        cmake -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} \
              -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} \
              -DCMAKE_BUILD_TYPE=Release  \
              -LAH .. 
        make

You can use ``make -j numproc`` if you have several processors.
To install L-Py on your environment

.. code-block:: bash

        make install
        python setup.py install

to install it into you python system.

To run test,

.. code-block:: bash

        cd test/
        nosetests

To launch the visual editor, you can type in your shell

.. code-block:: bash

        lpy

Compiling on Windows
=======

On Windows you must install **Visual Studio 2019** with Desktop C++ tools.

For your convenience a build script called `windows_build_dev.bat` has been written. If you installed **Visual Studio 2019** with Desktop C++ tools and **miniconda3** at the default location, with your environment called **lpydev**, running the script from the Windows Command Prompt should compile lpy.

If you want to compile manually, open the **Developer Command Prompt for VS 2019** (search for the shortcut in the Start Menu).

Then you should activate **conda** manually in that prompt. If you installed **miniconda3** in the default directory `C:\\Users\\YourName\\miniconda3` and if your environment is named `lpydev`, you can use the command:

.. code-block:: command

        %USERPROFILE%\miniconda3\Scripts\activate.bat %USERPROFILE%\miniconda3\envs\lpydev

Otherwise, adapt the command to the path where you installed miniconda3.

Then you can compile with the following commands:

.. code-block:: command
        
        mkdir build
        cd build
        cmake .. -G "Visual Studio 16 2019" ^
        -Wno-dev ^
        -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX%\Library ^
        -DCMAKE_PREFIX_PATH=%CONDA_PREFIX%\Library ^
        -DCMAKE_INSTALL_RPATH:STRING=%CONDA_PREFIX%\Library\lib ^
        -DCMAKE_INSTALL_NAME_DIR=%CONDA_PREFIX%\Library\lib ^
        -DPython3_EXECUTABLE=%CONDA_PREFIX%\python.exe
        
        cmake --build . --parallel %NUMBER_OF_PROCESSORS% --config Release --target install
        cd ..

Note: you can only compile using the config **Release** and the target **install** on Windows.

To install L-Py on your environment

.. code-block:: command

        python setup.py install

to install it into you python system.

To run test,

.. code-block:: command

        cd test/
        nosetests

To launch the visual editor, you can type in your shell

.. code-block:: command

        lpy


Notes on dependencies
========================

``L-Py`` core is a ``C++`` library but based on the ``Python`` language.
The communication between both language is made using ``Boost.Python``.
The ``PlantGL`` library is used for the 3D modelling and visualization.
The ``Qt`` library and its python wrappers ``PyQt`` (build with ``SIP``) are used to create the visual interface.
``PyOpenGL`` is used to display and edit the materials.

To compile and install it from sources, the project requires ``cmake`` and ``setuptools``.

To test it, the ``nosetests`` conventions is used.

All these projects have to be correctly installed before compiling ``L-Py``.

Additionally, the ``Cython`` module that make it possible to translate python code into ``C`` code is automatically integrated to the project if detected. You can install it if you want to test this extension.

