Date Archives

September 2019

Jupyter notebook as a service on Ubuntu 18.04 with Python 3

How amazing would it be to start your computer, visit localhost:8888, and  know that your Jupyter Notebook is waiting for you, up and running ? Well here is how to make this dream a reality on Ubuntu 18.04 with Python 3.

 

Step 1: Install Jupyter Notebook

 

Install pip3 and the python header files

sudo apt update 
sudo apt install python3-pip python3-dev

I also want the packages I install in my notebook not to be in conflict with the other python packages installed on the system, so I’m creating a virtual environment for Jupyter only. If the 2 lines of code below don’t work for you, check out this post for the full instructions.

virtualenv -p python3 notebook-env
. notebook-env/bin/activate

Your command line prompt should now be preceded by (notebook-env) to signal that you are working in the virtual environment you just created. As you will see by typing

(notebook-env) naysan@hp:~$ which pip3
/home/naysan/notebook-env/bin/pip3

From now on (until you deactivate the environment), the pip3 executable you will call is the one from your notebook environment. Use this pip3 binary to install jupyter

(notebook-env) naysan@hp:~$ pip3 install jupyter

Launch jupyter 

(notebook-env) naysan@hp:~$ jupyter-notebook

 

This command should open your browser at  localhost:8888. Now I don’t know about you, but since I launched the notebook from my home directory, there are a bunch of directories listed in the notebook interface that have nothing to do with where I’d like to store my python notebooks. Here is a way to dedicate a clean, separate directory for your Jupyter experiments.

Shut down your kernel with Ctrl+C, then

# Back to the HOME directory
(notebook-env) naysan@hp:~$ cd

# Create a clean new directory dedicated to your notebooks
(notebook-env) naysan@hp:~$ mkdir my-notebooks

# Use this directory as your --notebook-dir argment as you re-launch jupyter-notebook
(notebook-env) naysan@hp:~$ jupyter-notebook --notebook-dir=/home/naysan/my-notebooks

Much cleaner, right?

 

Step 2: Setup Jupyter-notebook as a service

 

This step is made easier if we setup a password for the notebook beforehand, otherwise Jupyter will ask you to use a very long token to access it. Shut down your kernel with Ctrl+C, then

(notebook-env) naysan@hp:~$ jupyter notebook password
Enter password: **********
Verify password: **********
[NotebookPasswordApp] Wrote hashed password to /home/naysan/.jupyter/jupyter_notebook_config.json

 

Locate your jupyter-notebook binary

(notebook-env) naysan@hp:~$ which jupyter-notebook 
/home/naysan/notebook-env/bin/jupyter-notebook 

Create a file named jupyter.service that contains the following content. Don’t forget to replace my personal info – like my user name, Naysan – with what works  for you

[Unit]
Description=Jupyter Notebook

[Service]
Type=simple
PIDFile=/run/jupyter.pid
ExecStart=/bin/bash -c ". /home/naysan/notebook-env/bin/activate;jupyter-notebook --notebook-dir=/home/naysan/my-notebooks"
User=naysan
Group=naysan
WorkingDirectory=/home/naysan/my-notebooks
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

 

It is now time to install the service

(notebook-env) naysan@hp:~$ sudo cp jupyter.service /etc/systemd/system/

# Use the enable command to ensure that the service starts whenever the system boots
(notebook-env) naysan@hp:~$ sudo systemctl enable jupyter.service

(notebook-env) naysan@hp:~$ sudo systemctl daemon-reload
(notebook-env) naysan@hp:~$ sudo systemctl start jupyter.service
(notebook-env) naysan@hp:~$ systemctl status jupyter.service 
● jupyter.service - Jupyter Notebook
   Loaded: loaded (/etc/systemd/system/jupyter.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-09-07 12:18:08 EDT; 53min ago
 Main PID: 32316 (bash)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/jupyter.service
           ├─32316 /bin/bash -c . /home/naysan/notebook-env/bin/activate;jupyter-notebook --notebook-dir=/home/naysan/my-notebooks
           └─32319 /home/naysan/notebook-env/bin/python3 /home/naysan/notebook-env/bin/jupyter-notebook --notebook-dir=/home/naysan/my-notebooks

Sep 07 12:18:08 hp bash[32316]: [I 12:18:08.473 NotebookApp] http://localhost:8888/

Step 3: Witness the magic

Visit http://localhost:8888/

Enter your password, and voilà, you are all set !

Avoir une startup et prendre trois semaines de vacances … une utopie ?

 

Si tu as besoin de quelque chose, juste à me l’envoyer avant Lundi. Après ça, je prends trois semaines de vacances, sans mon laptop.”

J’ai osé dire cette phrase à un client : ça m’a fait froid dans le dos. Il m’a juste répondu “Repose toi bien.”

Il faut dire que je suis entrepreneure, une profession où “vacances” semble faire partie du vocabulaire tabou. Entre fondateurs de startups, on se reconnaît à notre addiction au café et à notre manque de sommeil. C’est une fierté d’être occupé à 120%. Il y en a même qui m’ont dit ne jamais avoir besoin de congés, puisque depuis qu’ils ont fondé leur entreprise, “tous les jours c’est comme des vacances”.

Pourtant, j’étais réellement à bout. Trop de semaines de 70 heures. Trop d’occupation à 120%. Le café n’aidait plus vraiment… On a donc décidé de partir. Mais j’étais quand même incrédule: quand tu as déjà du mal à répondre aux courriels que tu reçois tous les jours, qu’est ce qui arrive si tu laisses le tout s’accumuler pendant trois semaines ?

Challenge accepted

Lundi, 20h, à l’aéroport. Pas de laptop dans les valises. Un peu plus tôt, je me suis sentie coupable de mettre mon message d’absence

Veuillez noter que je serai en congé du 13 Août au 2 Septembre…”

Est ce que nos clients vont croire que je suis fénéante ? Bon, tant pis. Qui vivra verra.

Au final, la première semaine de vacances a défié toutes mes attentes. J’avais même réussi à me sevrer de LinkedIn. Dans la maison de ma belle mère, en montagne, il y a un chat du nom de Smina qui règne en maître. Il dort beaucoup, et se réveille principalement pour manger. Smina était devenu mon maître spirituel: j’avais synchronisé mon rythme de vie avec lui. Le travail semblait loin…

10e jour: la rechute

Au milieu des vacances par contre, un doute m’a envahi : et si j’avais tort de me reposer ? Et si, dans tous les courriels que je n’ai pas lu, se cachaient des urgences que j’avais tort d’ignorer ? En proie à une panique soudaine, j’ai compulsivement fait défiler tous les courriels non lus, transféré ceux qui semblaient les plus urgents à mon co-fondateur et à l’équipe pour qu’ils s’en occupent.

Fière de ma prise de responsabilité soudaine, j’ai laissé un dernier message avant de retourner en mode vacances

– “Salut, j’ai transféré les courriels les plus urgents.”

La réponse fut directe

– “On s’était déjà occupés de tout ça”

Remise en question

J’ai mis quelques minutes à réaliser : la startup fonctionne très bien sans moi. Peut être même mieux ?

Me croyant indispensable, je m’étais mêlée du travail de l’équipe alors que tout était déjà sous contrôle.

Je me suis d’abord sentie un peu stupide. Et puis, peu à peu, ce sentiment a laissé place à quelque chose de beaucoup plus agréable : la fierté.

La prise de conscience

Oui, la compagnie fonctionne bien, avec ou sans moi. On a embauché des gens efficaces. Ça fait des mois qu’on optimise notre gestion de projet. On a même embauché un coach agile. On a travaillé fort pour que notre startup soit productive. Alors pourquoi avoir peur de prendre des vacances ?

J’ai fini par réaliser quelque chose : ce workoholism dont nous sommes souvent victimes, en tant qu’entrepreneurs, est ce un manque de confiance en l’équipe qu’on a bâti ?

Est ce qu’il y a une seule culture startup, où les fondateurs doivent être constamment fatigués pour prouver qu’ils travaillent, ou bien est ce qu’on a le droit d’envisager une autre alternative? Une alternative dans laquelle les entrepreneurs mettent l’effort nécessaire pour bâtir une équipe productive, puis se permettent de se reposer lorsqu’ils en ont besoin, parce que leur équipe est déshormais capable de se passer d’eux pendant quelques semaines.