Commit | Line | Data |
---|---|---|
ddc640e6 DB |
1 | { |
2 | "metadata": { | |
48ca56f1 | 3 | "name": "" |
ddc640e6 DB |
4 | }, |
5 | "nbformat": 3, | |
6 | "nbformat_minor": 0, | |
7 | "worksheets": [ | |
8 | { | |
9 | "cells": [ | |
10 | { | |
11 | "cell_type": "markdown", | |
12 | "metadata": {}, | |
13 | "source": [ | |
f5813acc | 14 | "# Debian + Python + virtualenv\n", |
ddc640e6 | 15 | "\n", |
f5813acc | 16 | "Debian + Python (+ virtualenv) = \u2661\n", |
00e8dd56 DB |
17 | "\n", |
18 | "## Introduction\n", | |
19 | "\n", | |
f5813acc DB |
20 | "Pr\u00e9requis\n", |
21 | "\n", | |
22 | "* Avoir install\u00e9 une distribution Linux bas\u00e9e sur Debian\n", | |
23 | "* \u00catre administrateur du syst\u00e8me (\u00eatre sudoer)\n", | |
24 | "\n", | |
25 | "Objectifs\n", | |
26 | "\n", | |
27 | "* Installer les paquets Debian essentiels pour le d\u00e9veloppement Python\n", | |
28 | "* S'initier aux environnements virtuels Python \n", | |
ddc640e6 | 29 | "\n", |
f5813acc DB |
30 | "## Environnement de d\u00e9veloppement Python sur une Linux bas\u00e9e Debian\n", |
31 | "\n", | |
32 | "### Python\n", | |
33 | "\n", | |
34 | "Python est d\u00e9j\u00e0 install\u00e9 par d\u00e9faut... c'est bien!\n", | |
ddc640e6 DB |
35 | "\n", |
36 | "* Lancer un terminal<pre>\n", | |
37 | "$\n", | |
38 | "</pre>\n", | |
39 | "\n", | |
40 | "* Lancer Python<pre>\n", | |
41 | "$ python\n", | |
42 | "</pre>\n", | |
43 | "\n", | |
44 | "* Identifier la version par d\u00e9faut de Python<pre>\n", | |
45 | "$ python\n", | |
46 | "Python 2.7.3 (default, Jan 2 2013, 16:53:07) \n", | |
47 | "[GCC 4.7.2] on linux2\n", | |
48 | "Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n", | |
49 | "<<<\n", | |
50 | "</pre>\n", | |
51 | "\n", | |
52 | "* Coder un truc<pre>\n", | |
53 | "<<< print \"Hello World!\"\n", | |
54 | "Hello World!\n", | |
55 | "</pre>\n", | |
56 | "\n", | |
f5813acc | 57 | "* Dans la vraie vie on \u00e9crit des scripts... donc il faut installer au moins un \u00e9diteur de texte... mais rendu l\u00e0, on va se monter un environnement de d\u00e9veloppement complet\n", |
ddc640e6 | 58 | "\n", |
f5813acc | 59 | "### Debian : installer un paquet Debian\n", |
ddc640e6 DB |
60 | "\n", |
61 | "Comment trouver un paquet\n", | |
62 | "\n", | |
553db694 DB |
63 | "* Web : tous les paquets : [http://packages.debian.org/fr/stable/allpackages](http://packages.debian.org/fr/stable/allpackages)\n", |
64 | "* Web : tous les paquets par cat\u00e9gorie : [http://packages.debian.org/fr/stable/](http://packages.debian.org/fr/stable/)\n", | |
65 | "* Web : paquets Python : [http://packages.debian.org/fr/stable/python/](http://packages.debian.org/fr/stable/python/)\n", | |
ddc640e6 | 66 | "\n", |
f5813acc | 67 | "Comment installer (mettre \u00e0 jour et supprimer) un paquet\n", |
ddc640e6 DB |
68 | "\n", |
69 | "* Mode graphique : o\u00f9 aller<pre>\n", | |
70 | "Applications > Outils syst\u00e8me > Ajouter/supprimer des logiciels\n", | |
71 | "</pre>\n", | |
72 | "* Ligne de commande : voici la commande<br />\n", | |
553db694 DB |
73 | "(remplacer \"package-name\" avec le nom du paquet que vous voulez installer/mettre \u00e0 jour/supprimer)\n", |
74 | "<pre>\n", | |
75 | "$ sudo apt-get install package-name\n", | |
76 | "</pre>\n", | |
77 | "<pre>\n", | |
78 | "$ sudo apt-get update package-name\n", | |
79 | "</pre>\n", | |
80 | "<pre>\n", | |
ddc640e6 DB |
81 | "$ sudo apt-get remove package-name\n", |
82 | "</pre>\n", | |
83 | "\n", | |
f5813acc | 84 | "### \u00c9diteur texte\n", |
ddc640e6 | 85 | "\n", |
f5813acc | 86 | "Un \u00e9diteur pour \u00e9crire des scripts...<br />\n", |
553db694 | 87 | "[http://packages.debian.org/fr/stable/editors/](http://packages.debian.org/fr/stable/editors/)\n", |
ddc640e6 DB |
88 | "\n", |
89 | "* Mode graphique : gedit est d\u00e9j\u00e0 l\u00e0\n", | |
90 | "* Ligne de commande : emacs, vim, nano\n", | |
91 | "* Quel choisir? une question de go\u00fbt\n", | |
f5813acc | 92 | "* Utile : coloration syntaxique, indentation en bloc, auto-compl\u00e9tion, masquer/afficher bloc de code...\n", |
ddc640e6 DB |
93 | "* Paquets Debian = \n", |
94 | "<pre>\n", | |
25d38a03 DB |
95 | "$ sudo apt-get install emacs<br />\n", |
96 | "$ sudo apt-get install vim<br />\n", | |
ddc640e6 DB |
97 | "$ sudo apt-get install nano\n", |
98 | "</pre>\n", | |
99 | "\n", | |
f5813acc DB |
100 | "### Python : interpr\u00e9teur Python\n", |
101 | "\n", | |
102 | "Interpr\u00e9teur Python d\u00e9j\u00e0 l\u00e0, mais pourquoi ne pas aller plus loin?\n", | |
ddc640e6 DB |
103 | "\n", |
104 | "* IPython : interpr\u00e9teur interactif<br />\n", | |
105 | "pourquoi IPython?\n", | |
f5813acc | 106 | "* IPython notebook : pourrait \u00eatre utile pour les futurs ateliers de formation :)\n", |
ddc640e6 DB |
107 | "* Paquets Debian = \n", |
108 | "<pre>\n", | |
25d38a03 | 109 | "$ sudo apt-get install ipython<br />\n", |
ddc640e6 DB |
110 | "$ sudo apt-get install ipython-notebook\n", |
111 | "</pre>\n", | |
112 | "\n", | |
f5813acc DB |
113 | "### Gestion des versions\n", |
114 | "\n", | |
115 | "S'outiller pour suivre l'historique des versions de son code\n", | |
ddc640e6 DB |
116 | "\n", |
117 | "* Pourquoi g\u00e9rer les versions du code source?\n", | |
118 | "* Quel choisir? git, mercurial...\n", | |
119 | "* Paquets Debian = \n", | |
120 | "<pre>\n", | |
25d38a03 DB |
121 | "$ sudo apt-get install git<br />\n", |
122 | "$ sudo apt-get install gitk<br />\n", | |
ddc640e6 DB |
123 | "$ sudo apt-get install mercurial\n", |
124 | "</pre>\n", | |
125 | "\n", | |
f5813acc | 126 | "### Extensions Python\n", |
ddc640e6 DB |
127 | "\n", |
128 | "* Les extensions Python \u00e9crites dans d'autres langages pourraient \u00eatre n\u00e9cessaires, donc il nous faut des outils pour pouvoir les compiler<br />\n", | |
129 | "ex.: gcc, pil...\n", | |
130 | "* build-essentials, python-dev (sources de Python)\n", | |
131 | "* Paquets Debian = \n", | |
132 | "<pre>\n", | |
25d38a03 | 133 | "$ sudo apt-get install build-essential<br />\n", |
ddc640e6 DB |
134 | "$ sudo apt-get install python-dev\n", |
135 | "</pre>\n", | |
136 | "\n", | |
f5813acc | 137 | "### Environnements virtuels\n", |
ddc640e6 | 138 | "\n", |
f5813acc | 139 | "* Pour installer des logiciels seulement au niveau projet\n", |
ddc640e6 DB |
140 | "* virtualenv\n", |
141 | "* Paquet Debian = \n", | |
142 | "<pre>\n", | |
143 | "$ sudo apt-get install python-virtualenv\n", | |
144 | "</pre>\n", | |
145 | "\n", | |
f5813acc | 146 | "### Outils Python offerts en paquet Debian\n", |
ddc640e6 DB |
147 | "\n", |
148 | "Science\n", | |
149 | "\n", | |
150 | "* matplotlib, numpy\n", | |
151 | "* Pour quoi?\n", | |
152 | "* Paquets Debian =\n", | |
153 | "<pre>\n", | |
25d38a03 | 154 | "$ sudo apt-get install python-matplotlib<br />\n", |
ddc640e6 DB |
155 | "$ sudo apt-get install python-numpy\n", |
156 | "</pre>\n", | |
157 | "\n", | |
158 | "Frameworks web\n", | |
159 | "\n", | |
160 | "* Django, Pyramid\n", | |
161 | "* Pour quoi? Quel choisir?\n", | |
162 | "* Paquets Debian =\n", | |
163 | "<pre>\n", | |
25d38a03 | 164 | "$ sudo apt-get install python-django<br />\n", |
ddc640e6 DB |
165 | "$ sudo apt-get install python-pyramid\n", |
166 | "</pre>\n", | |
167 | "\n", | |
f5813acc | 168 | "Pilotes de base de donn\u00e9es\n", |
ddc640e6 DB |
169 | "\n", |
170 | "* mysqldb, psycopg, sqlalchemy\n", | |
171 | "* Pour quoi? Quel choisir?\n", | |
172 | "* Paquets Debian =\n", | |
173 | "<pre>\n", | |
25d38a03 DB |
174 | "$ sudo apt-get install python-mysqldb<br />\n", |
175 | "$ sudo apt-get install python-psycopg2<br />\n", | |
ddc640e6 DB |
176 | "$ sudo apt-get install python-sqlalchemy\n", |
177 | "</pre>\n", | |
178 | "\n", | |
f5813acc DB |
179 | "## Environnements virtuels Python\n", |
180 | "\n", | |
181 | "Logiciels install\u00e9s au niveau syst\u00e8me (system-wide) vs install\u00e9s au niveau projet (project-wide)\n", | |
182 | "\n", | |
183 | "* Niveau syst\u00e8me : pour tous les projets, via paquets Debian (pourrait n\u00e9cessiter \"sudo\")\n", | |
184 | "* Niveau projet : propre au projet, via paquets Python dans un environnement virtuel Python, permet utilisation d'une version sp\u00e9cifique\n", | |
185 | "\n", | |
186 | "## Virtualenv\n", | |
187 | "\n", | |
25d38a03 | 188 | "[http://www.virtualenv.org](http://www.virtualenv.org)\n", |
f5813acc DB |
189 | "\n", |
190 | "Cr\u00e9er un environnement virtuel Python\n", | |
191 | "\n", | |
192 | "* qui s'ajoute \u00e0 celui du syst\u00e8me\n", | |
193 | "<pre>\n", | |
5df182ad | 194 | "$ virtualenv --system-site-packages env\n", |
f5813acc DB |
195 | "</pre>\n", |
196 | "\n", | |
197 | "* compl\u00e8tement isol\u00e9 du syst\u00e8me\n", | |
198 | "<pre>\n", | |
199 | "$ virtualenv --no-site-packages env\n", | |
200 | "</pre>\n", | |
201 | "\n", | |
202 | "* instance locale de Python dans l'environnement virtuel\n", | |
203 | "\n", | |
204 | "* supprimer le distribute.tar.gz si ajout\u00e9 par virtualenv, ex.:\n", | |
205 | "<pre>\n", | |
206 | "$ rm distribute-0.6.10.tar.gz\n", | |
207 | "</pre>\n", | |
208 | "\n", | |
209 | "Supprimer un environnement virtuel Python\n", | |
210 | "\n", | |
211 | "* simplement supprimer le r\u00e9pertoire cr\u00e9\u00e9\n", | |
212 | "<pre>\n", | |
213 | "$ rm -r env\n", | |
214 | "</pre>\n", | |
215 | "\n", | |
216 | "Utiliser un environnement virtuel Python\n", | |
217 | "\n", | |
218 | "* activer l'environnement virtuel Python\n", | |
219 | "<pre>\n", | |
220 | "$ source env/bin/activate\n", | |
221 | "</pre>\n", | |
222 | "\n", | |
223 | "* installer, mettre \u00e0 jour ou d\u00e9sintaller des paquets Python avec pip\n", | |
224 | "\n", | |
225 | "* d\u00e9sactiver l'environnement virtuel Python\n", | |
226 | "<pre>\n", | |
227 | "(env)$ deactivate\n", | |
228 | "</pre>\n", | |
229 | "\n", | |
230 | "## pip\n", | |
231 | "\n", | |
25d38a03 | 232 | "[http://www.pip-installer.org](http://www.pip-installer.org)\n", |
f5813acc DB |
233 | "\n", |
234 | "Installer et g\u00e9rer les paquets Python.\n", | |
235 | "\n", | |
236 | "* trouver les paquets \u00e0 installer : pypi<br />\n", | |
25d38a03 | 237 | "[https://pypi.python.org](https://pypi.python.org)<br />\n", |
f5813acc | 238 | "Exemple :<br />\n", |
25d38a03 | 239 | "ipython : [https://pypi.python.org/pypi/ipython/1.0.0](https://pypi.python.org/pypi/ipython/1.0.0)\n", |
f5813acc DB |
240 | "* cr\u00e9er un fichier requirements.txt dans votre projet\n", |
241 | "* ajouter un paquet requis par ligne (avec les versions autoris\u00e9es)<br />\n", | |
25d38a03 | 242 | "[http://www.pip-installer.org/en/latest/cookbook.html#requirements-files](http://www.pip-installer.org/en/latest/cookbook.html#requirements-files)<br />\n", |
f5813acc DB |
243 | "Exemple :\n", |
244 | "<pre>\n", | |
245 | "ipython == 1.0.0\n", | |
246 | "</pre>\n", | |
247 | "\n", | |
248 | "* installer avec pip\n", | |
249 | "<pre>\n", | |
250 | "(env)$ pip install -r requirements.txt\n", | |
251 | "</pre>\n", | |
252 | "\n", | |
253 | "* voir les versions des paquets Python accessibles au projet\n", | |
254 | "<pre>\n", | |
255 | "(env)$ pip freeze\n", | |
256 | "</pre>\n", | |
257 | "\n", | |
258 | "* utiliser les paquets<br />\n", | |
259 | "Exemple :\n", | |
260 | "<pre>\n", | |
25d38a03 | 261 | "(env)$ ipython<br />\n", |
f5813acc DB |
262 | "(env)$ ipython notebook\n", |
263 | "</pre>\n", | |
264 | "\n", | |
265 | "* ajouter autres d\u00e9pendances au besoin et les installer\n", | |
266 | "\n", | |
267 | "* supprimer des d\u00e9pendances\n", | |
268 | "<pre>\n", | |
269 | "(env)$ pip uninstall ipython\n", | |
270 | "</pre>\n", | |
271 | "\n", | |
272 | "\n", | |
ddc640e6 DB |
273 | "## Conclusion\n", |
274 | "\n", | |
275 | "Eh bien...\n", | |
276 | "\n", | |
277 | "* Pas besoin de grand chose\n", | |
278 | "* Tout est l\u00e0 dans Debian\n", | |
f5813acc | 279 | "* On contr\u00f4le et comprend son environnement de d\u00e9veloppement avec virtualenv et pip\n", |
ddc640e6 DB |
280 | "* C'est simple et l'fun!\n", |
281 | "\n", | |
282 | "## En suite?\n", | |
283 | "\n", | |
f5813acc | 284 | "Pour aller plus loin :\n", |
ddc640e6 | 285 | "\n", |
553db694 | 286 | "* paquets Debian pour Python : [http://packages.debian.org/fr/stable/python/](http://packages.debian.org/fr/stable/python/)\n", |
ddc640e6 | 287 | "\n", |
25d38a03 | 288 | "* paquets Python : [https://pypi.python.org](https://pypi.python.org)\n", |
ddc640e6 | 289 | "\n", |
25d38a03 | 290 | "* virtualenv : [http://www.virtualenv.org](http://www.virtualenv.org)\n", |
ddc640e6 | 291 | "\n", |
25d38a03 | 292 | "* pip : [http://www.pip-installer.org](http://www.pip-installer.org)\n" |
ddc640e6 DB |
293 | ] |
294 | } | |
295 | ], | |
296 | "metadata": {} | |
297 | } | |
298 | ] | |
299 | } |