Contribuer à un projet FOSS comme Bokeh peut en rebuter certains au vu de tout le travail à faire en amont. Voici un petit guide pour mettre en place un environnement de développement complet et isolé.


L'environnement

Commencez par créer un environnement de développement sain :

$ virtualenv venv
$ cd venv
$ source bin/activate

# On installe npm localement :
$ curl http://nodejs.org/dist/node-latest.tar.gz | tar xvz
$ cd node-v*
$ ./configure --prefix=$VIRTUAL_ENV
$ make -j 4 install
$ cd ..

# On réactive le virtualenv pour prendre en compte npm :
$ deactivate
$ source bin/activate

Les sources

Récupérez les sources de Bokeh, préalablement forké :

$ git clone https://github.com/BoboTiG/bokeh.git
$ cd bokeh

/!\ Pensez à travailler sur votre propre branche.


Les dépendances

Actuellement, Bokeh en est à la version 0.12.2, voici les commandes pour installer les pré-requis :

# Modules Python
# Pour le développement
$ python -m pip install bs4 colorama pytest pytest-cov pytest-selenium mock websocket-client flake8 boto
# Pour la documentation
$ python -m pip install sphinx pygments
# Dépendances de base
$ python -m pip install jinja2 numpy python-dateutil requests tornado pyyaml
# Pour les tests
$ python -m pip install pandas ggplot seaborn nbformat flexx jupyter sympy networkx
$ apt-get install phantomjs
# Si vous utilisez Python 2.7
$ python -m pip install futures

# Modules JavaScript
$ cd bokehjs
$ npm install
$ cd ..

Pour vérifier si les dépendances sont toutes satisfaites :

$ python scripts/devdeps.py

Enfin, activez le mode développement :

$ python setup.py develop

Et sélectionnez le premier choix.


Les tests

Étape cruciale que vous referez une paire de fois : vérifier que tout fonctionne comme prévu, qu'il n'y a pas de régression ni de nouveaux bugs.

Pour démarrer toute la batterie de tests (ne prend pas en compte la documentation), faîtes :

$ python -m pytest

Sinon, au cas par cas :

# Si vous avez bidouillé du code Python :
$ python -c 'import bokeh; bokeh.test()'

# Si vous avez bidouillé du code dans le dossier bokehjs (CoffeeScript, CSS, JavaScript) :
$ cd bokehjs
$ gulp test

Enfin, si vous avez fait le job correctement, vous avez écrit de la doc'. Donc :

$ cd sphinx
$ make clean all

Hacking

Pour prendre en compte les mofications faîtes dans le dossier bokehjs, lancez cette commande pour mettre à jour les scripts :

$ cd bokejs
$ gulp dev-build

Et pour lancer un script Python en utilisant la version en cours de développement de Bokeh :

$ BOKEH_RESOURCES=relative-dev python example.py
$ BOKEH_DEV=true bokeh serve example-server.py

Sources :