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
pip install bs4 colorama pytest pytest-cov pytest-selenium mock websocket-client flake8 boto
# Pour la documentation
pip install sphinx pygments
# Dépendances de base
pip install jinja2 numpy python-dateutil requests tornado pyyaml
# Pour les tests
pip install pandas ggplot seaborn nbformat flexx jupyter sympy networkx
apt-get install phantomjs
# Si vous utilisez Python 2.7
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 :

py.test

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 :