build_from_source.rst 2.49 KB
Newer Older
liuzhe-lz's avatar
liuzhe-lz committed
1
2
3
4
5
6
7
Build from Source
=================

This article describes how to build and install NNI from `source code`_.

We recommend using latest setuptools:

liuzhe-lz's avatar
liuzhe-lz committed
8
.. code-block:: text
liuzhe-lz's avatar
liuzhe-lz committed
9

liuzhe-lz's avatar
liuzhe-lz committed
10
    pip install --upgrade setuptools pip wheel
liuzhe-lz's avatar
liuzhe-lz committed
11
12
13
14
15
16
17
18

.. _source code: https://github.com/microsoft/nni

Development Build
-----------------

If you want to build NNI for your own use, we recommend using `development mode`_.

liuzhe-lz's avatar
liuzhe-lz committed
19
.. code-block:: text
liuzhe-lz's avatar
liuzhe-lz committed
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

    python setup.py develop

This will install NNI as symlink, and the version number will be ``999.dev0``.

.. _development mode: https://setuptools.pypa.io/en/latest/userguide/development_mode.html

Release Build
-------------

To install in release mode, you must first build a wheel.
NNI does not support setuptools' "install" command.

A release package requires jupyterlab to build the extension:

liuzhe-lz's avatar
liuzhe-lz committed
35
.. code-block:: text
liuzhe-lz's avatar
liuzhe-lz committed
36

liuzhe-lz's avatar
liuzhe-lz committed
37
    pip install jupyterlab
liuzhe-lz's avatar
liuzhe-lz committed
38
39
40
41
42

And you need to set ``NNI_RELEASE`` environment variable, and compile TypeScript modules before "bdist_wheel".

In bash:

liuzhe-lz's avatar
liuzhe-lz committed
43
.. code-block:: bash
liuzhe-lz's avatar
liuzhe-lz committed
44
45
46
47
48
49
50

    export NNI_RELEASE=2.7
    python setup.py build_ts
    python bdist_wheel

In PowerShell:

liuzhe-lz's avatar
liuzhe-lz committed
51
.. code-block:: powershell
liuzhe-lz's avatar
liuzhe-lz committed
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

    $env:NNI_RELEASE=2.7
    python setup.py build_ts
    python bdist_wheel

If successful, you will find the wheel in ``dist`` directory.

.. note::

    NNI's build process is somewhat complicated.
    This is due to setuptools and TypeScript not working well together.

    Setuptools require to provide ``package_data``, the full list of package files, before running any command.
    However it is nearly impossible to predict what files will be generated before invoking TypeScript compiler.

    If you have any solution for this problem, please open an issue to let us know.

Build Docker Image
------------------

liuzhe-lz's avatar
liuzhe-lz committed
72
You can build a Docker image with :githublink:`Dockerfile <Dockerfile>`:
liuzhe-lz's avatar
liuzhe-lz committed
73

liuzhe-lz's avatar
liuzhe-lz committed
74
.. code-block:: bash
liuzhe-lz's avatar
liuzhe-lz committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

    export NNI_RELEASE=2.7
    python setup.py build_ts
    python setup.py bdist_wheel -p manylinux1_x86_64
    docker build --build-arg NNI_RELEASE=${NNI_RELEASE} -t my/nni .

To build image for other platforms, please edit Dockerfile yourself.

Other Commands and Options
--------------------------

Clean
^^^^^

If the build fails, please clean up and try again:

liuzhe-lz's avatar
liuzhe-lz committed
91
.. code:: text
liuzhe-lz's avatar
liuzhe-lz committed
92
93
94
95
96
97
98
99
100
101

    python setup.py clean

Skip compiling TypeScript modules
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This is useful when you have uninstalled NNI from development mode and want to install again.

It will not work if you have never built TypeScript modules before.

liuzhe-lz's avatar
liuzhe-lz committed
102
.. code:: text
liuzhe-lz's avatar
liuzhe-lz committed
103
104

    python setup.py develop --skip-ts