Wiki

Version 118 (Etienne Pallier, 03/18/2016 06:14 pm)

1 1 Etienne Pallier
h1. Technical Documentation for the PYROS project (FGFT-CC)
2 1 Etienne Pallier
3 1 Etienne Pallier
4 1 Etienne Pallier
HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting
5 1 Etienne Pallier
6 1 Etienne Pallier
{{>toc}}
7 1 Etienne Pallier
8 1 Etienne Pallier
9 1 Etienne Pallier
10 3 Etienne Pallier
---
11 1 Etienne Pallier
12 57 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}TODO%
13 57 Etienne Pallier
14 115 Etienne Pallier
ajouter lien vers pyros_create.sql
15 57 Etienne Pallier
16 112 Etienne Pallier
...
17 112 Etienne Pallier
18 57 Etienne Pallier
---
19 57 Etienne Pallier
20 117 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}I - DATABASE SCHEMA%
21 116 Etienne Pallier
22 116 Etienne Pallier
23 117 Etienne Pallier
{{thumbnail(PYROS_PDM_v021.png, size=300, title=Pyros data model)}}
24 116 Etienne Pallier
25 118 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}II - INSTALLATION%
26 2 Etienne Pallier
27 51 Etienne Pallier
h3. If necessary, install MySql
28 2 Etienne Pallier
29 49 Etienne Pallier
 * Linux Ubuntu
30 49 Etienne Pallier
<pre>
31 107 Paul Carensac
32 107 Paul Carensac
$ sudo apt-get install mysql-server
33 107 Paul Carensac
$ sudo apt-get install mysql-client
34 107 Paul Carensac
35 49 Etienne Pallier
</pre>
36 49 Etienne Pallier
37 49 Etienne Pallier
 * Linux CentOS
38 49 Etienne Pallier
<pre>
39 49 Etienne Pallier
TODO:
40 49 Etienne Pallier
$ sudo yum install mysql
41 49 Etienne Pallier
...
42 49 Etienne Pallier
</pre>
43 49 Etienne Pallier
44 49 Etienne Pallier
 * Mac OS X
45 49 Etienne Pallier
<pre>
46 49 Etienne Pallier
TODO:
47 49 Etienne Pallier
Install XAMPP
48 49 Etienne Pallier
(but you could also use the pre-installed Mac OS MySql)
49 49 Etienne Pallier
</pre>
50 49 Etienne Pallier
51 49 Etienne Pallier
 * Windows
52 49 Etienne Pallier
<pre>
53 49 Etienne Pallier
TODO:
54 49 Etienne Pallier
</pre>
55 49 Etienne Pallier
56 49 Etienne Pallier
57 49 Etienne Pallier
---
58 1 Etienne Pallier
59 6 Etienne Pallier
h3. Create database
60 1 Etienne Pallier
61 52 Etienne Pallier
62 52 Etienne Pallier
 * Linux and Mac OS X:
63 52 Etienne Pallier
<pre>
64 3 Etienne Pallier
One liner:
65 115 Etienne Pallier
$ mysql -u root < pyros_create.sql
66 1 Etienne Pallier
67 3 Etienne Pallier
Or :
68 3 Etienne Pallier
$ mysql -u root
69 3 Etienne Pallier
mysql> create database pyros;
70 3 Etienne Pallier
mysql> use pyros;
71 115 Etienne Pallier
mysql> source pyros_create.sql;
72 1 Etienne Pallier
73 3 Etienne Pallier
(
74 3 Etienne Pallier
TODO:
75 3 Etienne Pallier
mysql> grant all on pyros.* to pyros@localhost identified by ‘pyros’;)
76 3 Etienne Pallier
mysql> flush privileges;
77 3 Etienne Pallier
)
78 52 Etienne Pallier
</pre>
79 1 Etienne Pallier
80 53 Etienne Pallier
81 53 Etienne Pallier
 * Windows:
82 52 Etienne Pallier
<pre>
83 52 Etienne Pallier
TODO: Use phpmyadmin ?
84 52 Etienne Pallier
</pre>
85 1 Etienne Pallier
86 1 Etienne Pallier
87 4 Etienne Pallier
---
88 5 Etienne Pallier
89 6 Etienne Pallier
h3. Install python3.5
90 1 Etienne Pallier
91 11 Etienne Pallier
92 11 Etienne Pallier
 * Mac OS X :
93 23 Etienne Pallier
<pre>
94 24 Etienne Pallier
1) Installer MacPort
95 24 Etienne Pallier
(TODO: doc)
96 24 Etienne Pallier
97 24 Etienne Pallier
2) Installer le "port" python35
98 1 Etienne Pallier
$ sudo port install python35
99 1 Etienne Pallier
</pre>
100 1 Etienne Pallier
101 1 Etienne Pallier
 * Linux (Ubuntu) :
102 1 Etienne Pallier
<pre>
103 107 Paul Carensac
sudo add-apt-repository ppa:fkrull/deadsnakes
104 107 Paul Carensac
sudo apt-get update
105 107 Paul Carensac
sudo apt-get install python3.5
106 107 Paul Carensac
107 107 Paul Carensac
sudo pip install virtualenv
108 23 Etienne Pallier
</pre>
109 1 Etienne Pallier
110 5 Etienne Pallier
111 3 Etienne Pallier
112 4 Etienne Pallier
---
113 5 Etienne Pallier
114 13 Etienne Pallier
h3. Create project dir
115 13 Etienne Pallier
116 68 Etienne Pallier
<pre>
117 74 Etienne Pallier
$ mkdir PYROS
118 68 Etienne Pallier
</pre>
119 13 Etienne Pallier
120 13 Etienne Pallier
---
121 59 Etienne Pallier
122 59 Etienne Pallier
h3. Get the project (from git)
123 59 Etienne Pallier
124 78 Etienne Pallier
<pre>
125 59 Etienne Pallier
TODO:
126 79 Etienne Pallier
127 80 Etienne Pallier
$ git ...
128 78 Etienne Pallier
</pre>
129 78 Etienne Pallier
130 59 Etienne Pallier
131 59 Etienne Pallier
132 59 Etienne Pallier
---
133 59 Etienne Pallier
134 60 Etienne Pallier
h3. Create virtualenv with python3.5 dedicated to pyros project (inside the project folder)
135 3 Etienne Pallier
136 75 Etienne Pallier
$ cd PYROS/
137 3 Etienne Pallier
138 3 Etienne Pallier
$ which python3.5
139 3 Etienne Pallier
/opt/local/bin/python3.5
140 3 Etienne Pallier
141 15 Etienne Pallier
$ virtualenv-3.5 venv_py35_pyros -p /opt/local/bin/python3.5
142 3 Etienne Pallier
=> creates a venv_py35_pyros/ folder inside pyros/
143 3 Etienne Pallier
144 1 Etienne Pallier
145 1 Etienne Pallier
146 7 Etienne Pallier
---
147 3 Etienne Pallier
148 65 Etienne Pallier
h3. Activate the python virtual environment (from inside the project)
149 7 Etienne Pallier
150 55 Etienne Pallier
<pre>
151 1 Etienne Pallier
152 65 Etienne Pallier
$ pwd
153 76 Etienne Pallier
.../PYROS
154 1 Etienne Pallier
155 65 Etienne Pallier
$ source ./venv_py35_pyros/bin/activate
156 65 Etienne Pallier
157 3 Etienne Pallier
$ python -V
158 1 Etienne Pallier
Python 3.5.1
159 3 Etienne Pallier
160 3 Etienne Pallier
$ which pip
161 77 Etienne Pallier
.../PYROS/venv_py35_pyros/bin/pip
162 16 Etienne Pallier
163 18 Etienne Pallier
Upgrade pip to last version available :
164 3 Etienne Pallier
$ pip install --upgrade pip
165 3 Etienne Pallier
Collecting pip
166 3 Etienne Pallier
  Downloading pip-8.1.1-py2.py3-none-any.whl (1.2MB)
167 3 Etienne Pallier
Installing collected packages: pip
168 3 Etienne Pallier
  Found existing installation: pip 7.1.2
169 3 Etienne Pallier
    Uninstalling pip-7.1.2:
170 3 Etienne Pallier
      Successfully uninstalled pip-7.1.2
171 1 Etienne Pallier
Successfully installed pip-8.1.1
172 55 Etienne Pallier
173 55 Etienne Pallier
</pre>
174 18 Etienne Pallier
175 27 Etienne Pallier
h3. Install needed python packages (from within the virtual environment)
176 18 Etienne Pallier
177 66 Etienne Pallier
First, be sure that the virtual environment is activated:
178 66 Etienne Pallier
<pre>
179 66 Etienne Pallier
$ python -V
180 66 Etienne Pallier
Python 3.5.1
181 66 Etienne Pallier
</pre>
182 66 Etienne Pallier
183 62 Etienne Pallier
 * *Automatic Installation of all packages*
184 62 Etienne Pallier
<pre>
185 90 Etienne Pallier
$ pip install -r REQUIREMENTS.txt
186 62 Etienne Pallier
</pre>
187 62 Etienne Pallier
188 93 Etienne Pallier
 * *Or, manual installation of each package*
189 62 Etienne Pallier
190 62 Etienne Pallier
  * *Install Django* :
191 32 Etienne Pallier
<pre>
192 3 Etienne Pallier
$ pip install django
193 3 Etienne Pallier
Collecting django
194 3 Etienne Pallier
  Downloading Django-1.9.4-py2.py3-none-any.whl (6.6MB)
195 3 Etienne Pallier
Installing collected packages: django
196 3 Etienne Pallier
Successfully installed django-1.9.4
197 3 Etienne Pallier
198 3 Etienne Pallier
$ pip install django-admin-tools
199 3 Etienne Pallier
Collecting django-admin-tools
200 3 Etienne Pallier
  Downloading django_admin_tools-0.7.2-py2.py3-none-any.whl (289kB)
201 3 Etienne Pallier
Installing collected packages: django-admin-tools
202 3 Etienne Pallier
Successfully installed django-admin-tools-0.7.2
203 3 Etienne Pallier
204 21 Etienne Pallier
$ pip install django-debug-toolbar
205 21 Etienne Pallier
Collecting django-debug-toolbar
206 21 Etienne Pallier
  Downloading django_debug_toolbar-1.4-py2.py3-none-any.whl (212kB)
207 21 Etienne Pallier
Requirement already satisfied (use --upgrade to upgrade): Django>=1.7 in ./venv_py35_pyros/lib/python3.5/site-packages (from django-debug-toolbar)
208 21 Etienne Pallier
Collecting sqlparse (from django-debug-toolbar)
209 21 Etienne Pallier
  Downloading sqlparse-0.1.19.tar.gz (58kB)
210 21 Etienne Pallier
Building wheels for collected packages: sqlparse
211 21 Etienne Pallier
  Running setup.py bdist_wheel for sqlparse ... done
212 21 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/7b/d4/72/6011bb100dd5fc213164e4bbee13d4e03261dd54ce6a5de6b8
213 21 Etienne Pallier
Successfully built sqlparse
214 21 Etienne Pallier
Installing collected packages: sqlparse, django-debug-toolbar
215 21 Etienne Pallier
Successfully installed django-debug-toolbar-1.4 sqlparse-0.1.19
216 21 Etienne Pallier
217 21 Etienne Pallier
$ pip install django-extensions
218 21 Etienne Pallier
Collecting django-extensions
219 21 Etienne Pallier
  Downloading django_extensions-1.6.1-py2.py3-none-any.whl (202kB)
220 21 Etienne Pallier
Collecting six>=1.2 (from django-extensions)
221 21 Etienne Pallier
  Downloading six-1.10.0-py2.py3-none-any.whl
222 21 Etienne Pallier
Installing collected packages: six, django-extensions
223 21 Etienne Pallier
Successfully installed django-extensions-1.6.1 six-1.10.0
224 21 Etienne Pallier
225 21 Etienne Pallier
$ pip install django-suit
226 21 Etienne Pallier
Collecting django-suit
227 21 Etienne Pallier
  Downloading django-suit-0.2.18.tar.gz (587kB)
228 21 Etienne Pallier
Building wheels for collected packages: django-suit
229 1 Etienne Pallier
  Running setup.py bdist_wheel for django-suit ... done
230 1 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/12/8b/9a/e02ab0ad9229881638aa040d47d77c8f562999533811927d41
231 1 Etienne Pallier
Successfully built django-suit
232 1 Etienne Pallier
Installing collected packages: django-suit
233 1 Etienne Pallier
Successfully installed django-suit-0.2.18
234 21 Etienne Pallier
235 32 Etienne Pallier
</pre>
236 32 Etienne Pallier
237 63 Etienne Pallier
  * *Install the web application server gunicorn (will be used in production instead of the dev django web server)* :
238 32 Etienne Pallier
<pre>
239 25 Etienne Pallier
$ pip install gunicorn
240 25 Etienne Pallier
Collecting gunicorn
241 25 Etienne Pallier
  Downloading gunicorn-19.4.5-py2.py3-none-any.whl (112kB)
242 21 Etienne Pallier
Installing collected packages: gunicorn
243 26 Etienne Pallier
Successfully installed gunicorn-19.4.5
244 1 Etienne Pallier
</pre>
245 1 Etienne Pallier
246 63 Etienne Pallier
  * *Install the python mysql client*:
247 32 Etienne Pallier
<pre>
248 32 Etienne Pallier
$ pip install mysqlclient
249 72 Etienne Pallier
...
250 72 Etienne Pallier
</pre>
251 33 Etienne Pallier
252 73 Etienne Pallier
   * => Issue under Mac OS X:
253 72 Etienne Pallier
<pre>
254 3 Etienne Pallier
$ pip install mysqlclient
255 3 Etienne Pallier
Collecting mysqlclient
256 1 Etienne Pallier
  Downloading mysqlclient-1.3.7.tar.gz (79kB)
257 22 Etienne Pallier
Building wheels for collected packages: mysqlclient
258 3 Etienne Pallier
  Running setup.py bdist_wheel for mysqlclient ... error
259 3 Etienne Pallier
260 1 Etienne Pallier
  ----------------------------------------
261 1 Etienne Pallier
  Failed building wheel for mysqlclient
262 1 Etienne Pallier
  Running setup.py clean for mysqlclient
263 1 Etienne Pallier
Failed to build mysqlclient
264 1 Etienne Pallier
Installing collected packages: mysqlclient
265 1 Etienne Pallier
  Running setup.py install for mysqlclient ... done
266 1 Etienne Pallier
Successfully installed mysqlclient-1.3.7
267 1 Etienne Pallier
268 1 Etienne Pallier
BOUH !!!
269 1 Etienne Pallier
270 1 Etienne Pallier
$ pip install --upgrade wheel
271 1 Etienne Pallier
Collecting wheel
272 1 Etienne Pallier
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
273 1 Etienne Pallier
Installing collected packages: wheel
274 1 Etienne Pallier
  Found existing installation: wheel 0.24.0
275 1 Etienne Pallier
    Uninstalling wheel-0.24.0:
276 1 Etienne Pallier
      Successfully uninstalled wheel-0.24.0
277 1 Etienne Pallier
Successfully installed wheel-0.29.0
278 1 Etienne Pallier
279 1 Etienne Pallier
$ pip uninstall mysqlclient
280 1 Etienne Pallier
281 1 Etienne Pallier
$ pip install mysqlclient
282 1 Etienne Pallier
Collecting mysqlclient
283 1 Etienne Pallier
  Using cached mysqlclient-1.3.7.tar.gz
284 1 Etienne Pallier
Building wheels for collected packages: mysqlclient
285 1 Etienne Pallier
  Running setup.py bdist_wheel for mysqlclient ... done
286 1 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/9b/06/50/d11418c26cf8f2156b13d4363b5afde8e7e75ebb8540d0228d
287 1 Etienne Pallier
Successfully built mysqlclient
288 1 Etienne Pallier
Installing collected packages: mysqlclient
289 1 Etienne Pallier
Successfully installed mysqlclient-1.3.7
290 1 Etienne Pallier
291 1 Etienne Pallier
YES !!!
292 1 Etienne Pallier
293 1 Etienne Pallier
</pre>
294 1 Etienne Pallier
295 107 Paul Carensac
   * => Issues under Ubuntu:
296 107 Paul Carensac
<pre>
297 107 Paul Carensac
$ pip install mysqlclient
298 107 Paul Carensac
Collecting mysqlclient
299 107 Paul Carensac
  Downloading mysqlclient-1.3.7.tar.gz (79kB)
300 107 Paul Carensac
    100% |████████████████████████████████| 81kB 1.5MB/s
301 107 Paul Carensac
    Complete output from command python setup.py egg_info:
302 107 Paul Carensac
    /bin/sh: 1: mysql_config: not found
303 107 Paul Carensac
    Traceback (most recent call last):
304 107 Paul Carensac
      File "<string>", line 1, in <module>
305 107 Paul Carensac
    [...]
306 107 Paul Carensac
    ----------------------------------------
307 107 Paul Carensac
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-q6j4inuz/mysqlclient/
308 1 Etienne Pallier
309 108 Paul Carensac
BOUH !!!
310 108 Paul Carensac
311 107 Paul Carensac
$ sudo apt-get install libmysqlclient-dev
312 108 Paul Carensac
313 107 Paul Carensac
$ pip install mysqlclient
314 107 Paul Carensac
Collecting mysqlclient
315 107 Paul Carensac
  Using cached mysqlclient-1.3.7.tar.gz
316 107 Paul Carensac
Building wheels for collected packages: mysqlclient
317 107 Paul Carensac
  Running setup.py bdist_wheel for mysqlclient ... error
318 107 Paul Carensac
319 107 Paul Carensac
    _mysql.c:40:20: fatal error: Python.h: No such file or directory
320 107 Paul Carensac
     #include "Python.h"
321 107 Paul Carensac
                        ^
322 107 Paul Carensac
    compilation terminated.
323 107 Paul Carensac
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
324 107 Paul Carensac
    
325 107 Paul Carensac
    ----------------------------------------
326 107 Paul Carensac
Command "/home/carens_p/pyros/venv_py35_pyros/bin/python3.5 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-k3klv92j/mysqlclient/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-gz242xxs-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/carens_p/pyros/venv_py35_pyros/include/site/python3.5/mysqlclient" failed with error code 1 in /tmp/pip-build-k3klv92j/mysqlclient/
327 107 Paul Carensac
328 108 Paul Carensac
BOUH !!!
329 108 Paul Carensac
330 107 Paul Carensac
$ sudo apt-get install python3.5-dev
331 108 Paul Carensac
332 107 Paul Carensac
$ pip install mysqlclient
333 107 Paul Carensac
334 107 Paul Carensac
YES !!!
335 107 Paul Carensac
336 107 Paul Carensac
</pre>
337 12 Etienne Pallier
338 82 Etienne Pallier
 * *Set Requirements*
339 82 Etienne Pallier
340 82 Etienne Pallier
<pre>
341 82 Etienne Pallier
$ pip freeze > REQUIREMENTS.txt
342 82 Etienne Pallier
</pre>
343 12 Etienne Pallier
344 12 Etienne Pallier
---
345 28 Etienne Pallier
346 12 Etienne Pallier
h3. Project organization
347 29 Etienne Pallier
 
348 1 Etienne Pallier
Example of a good organization :
349 29 Etienne Pallier
350 29 Etienne Pallier
1 project = N applis
351 30 Etienne Pallier
(but 1 appli can be part of many projects)
352 12 Etienne Pallier
(then 1 appli = N models)
353 31 Etienne Pallier
354 34 Etienne Pallier
<pre>
355 29 Etienne Pallier
356 34 Etienne Pallier
MYPROJECT/
357 50 Etienne Pallier
358 1 Etienne Pallier
359 1 Etienne Pallier
	src/
360 34 Etienne Pallier
		myproject/
361 34 Etienne Pallier
		appli1/
362 12 Etienne Pallier
		appli2/
363 34 Etienne Pallier
364 34 Etienne Pallier
		appliN/
365 12 Etienne Pallier
366 34 Etienne Pallier
	public/
367 34 Etienne Pallier
		static/
368 12 Etienne Pallier
369 1 Etienne Pallier
	private/
370 89 Etienne Pallier
		REQUIREMENTS.txt
371 50 Etienne Pallier
372 50 Etienne Pallier
	venv_py35_pyros/
373 1 Etienne Pallier
374 1 Etienne Pallier
</pre>
375 1 Etienne Pallier
376 37 Etienne Pallier
377 37 Etienne Pallier
Set needed folders:
378 37 Etienne Pallier
<pre>
379 81 Etienne Pallier
$ cd PYROS/
380 12 Etienne Pallier
$ mkdir private public
381 37 Etienne Pallier
$ mkdir public/static
382 3 Etienne Pallier
</pre>
383 7 Etienne Pallier
384 3 Etienne Pallier
---
385 39 Etienne Pallier
386 7 Etienne Pallier
h3. Create Django project pyros
387 38 Etienne Pallier
388 38 Etienne Pallier
<pre>
389 1 Etienne Pallier
390 83 Etienne Pallier
From inside the project:
391 83 Etienne Pallier
$ pwd
392 83 Etienne Pallier
.../PYROS/
393 83 Etienne Pallier
394 1 Etienne Pallier
$ django-admin startproject pyros
395 1 Etienne Pallier
396 84 Etienne Pallier
$ mv pyros src
397 84 Etienne Pallier
398 86 Etienne Pallier
$ mv REQUIREMENTS.txt private/
399 1 Etienne Pallier
400 86 Etienne Pallier
We have then this architecture:
401 86 Etienne Pallier
402 1 Etienne Pallier
PYROS
403 83 Etienne Pallier
├── private
404 86 Etienne Pallier
│   └── REQUIREMENTS.txt
405 83 Etienne Pallier
├── public
406 83 Etienne Pallier
│   └── static
407 83 Etienne Pallier
├── src
408 83 Etienne Pallier
│   ├── db.sqlite3
409 83 Etienne Pallier
│   ├── manage.py
410 1 Etienne Pallier
│   ├── pyros
411 84 Etienne Pallier
│   │   ├── __init__.py
412 84 Etienne Pallier
│   │   ├── settings.py
413 84 Etienne Pallier
│   │   ├── urls.py
414 84 Etienne Pallier
│   │   └── wsgi.py
415 85 Etienne Pallier
└── venv_py35_pyros
416 3 Etienne Pallier
417 3 Etienne Pallier
418 3 Etienne Pallier
$ cd src/
419 40 Etienne Pallier
420 1 Etienne Pallier
$ ./manage.py runserver
421 38 Etienne Pallier
(or gunicorn pyros.wsgi)
422 3 Etienne Pallier
==> http://localhost:8000
423 87 Etienne Pallier
...
424 87 Etienne Pallier
...
425 87 Etienne Pallier
Ctrl-c
426 87 Etienne Pallier
427 3 Etienne Pallier
</pre>
428 7 Etienne Pallier
429 3 Etienne Pallier
430 42 Etienne Pallier
---
431 7 Etienne Pallier
432 3 Etienne Pallier
h3. Set Database engine as MySql
433 3 Etienne Pallier
434 41 Etienne Pallier
Edit src/pyros/settings.py
435 3 Etienne Pallier
436 3 Etienne Pallier
<pre>
437 3 Etienne Pallier
DATABASES = {
438 1 Etienne Pallier
    'default': {
439 3 Etienne Pallier
        'ENGINE': 'django.db.backends.mysql',
440 1 Etienne Pallier
        'NAME': 'pyros',
441 1 Etienne Pallier
        'USER': 'root',
442 1 Etienne Pallier
        'PASSWORD': ''
443 41 Etienne Pallier
    }
444 3 Etienne Pallier
}
445 7 Etienne Pallier
</pre>
446 3 Etienne Pallier
447 43 Etienne Pallier
---
448 7 Etienne Pallier
449 43 Etienne Pallier
h3. Import database into Django (with inspectdb)
450 3 Etienne Pallier
451 101 Etienne Pallier
From src/ :
452 94 Etienne Pallier
453 3 Etienne Pallier
<pre>
454 44 Etienne Pallier
$ ./manage.py inspectdb > models.py
455 94 Etienne Pallier
</pre>
456 44 Etienne Pallier
457 97 Etienne Pallier
Issue on Mac OS X:
458 3 Etienne Pallier
<pre>
459 3 Etienne Pallier
Traceback (most recent call last):
460 3 Etienne Pallier
  File "/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 25, in <module>
461 3 Etienne Pallier
    import MySQLdb as Database
462 3 Etienne Pallier
  File "/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/MySQLdb/__init__.py", line 19, in <module>
463 3 Etienne Pallier
    import _mysql
464 3 Etienne Pallier
ImportError: dlopen(/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
465 3 Etienne Pallier
  Referenced from: /Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
466 3 Etienne Pallier
  Reason: image not found
467 3 Etienne Pallier
468 3 Etienne Pallier
=> BOUH !!!
469 3 Etienne Pallier
470 3 Etienne Pallier
LA SOLUTION EST ICI : http://stackoverflow.com/questions/6383310/python-mysqldb-library-not-loaded-libmysqlclient-18-dylib
471 3 Etienne Pallier
472 3 Etienne Pallier
(
473 3 Etienne Pallier
Apparemment, ceci aurait dû suffire:
474 3 Etienne Pallier
mkdir -p /usr/local/lib   
475 3 Etienne Pallier
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib
476 3 Etienne Pallier
)
477 3 Etienne Pallier
478 3 Etienne Pallier
Mais j’ai fait ceci:
479 3 Etienne Pallier
480 1 Etienne Pallier
$ otool -L /Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
481 10 Etienne Pallier
/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so:
482 3 Etienne Pallier
	libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
483 3 Etienne Pallier
...
484 3 Etienne Pallier
485 1 Etienne Pallier
$ locate libmysqlclient.18.dylib
486 1 Etienne Pallier
/Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib
487 1 Etienne Pallier
/Library/SystemMigration/History/Migration-68137DFB-CB6A-4FBB-81E2-11BDB5D01E48/QuarantineRoot/usr/lib/libmysqlclient.18.dylib
488 1 Etienne Pallier
489 10 Etienne Pallier
$ sudo install_name_tool -change libmysqlclient.18.dylib /Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib /Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
490 10 Etienne Pallier
491 10 Etienne Pallier
$ otool -L /Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
492 10 Etienne Pallier
/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so:
493 3 Etienne Pallier
	/Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
494 1 Etienne Pallier
...
495 1 Etienne Pallier
496 3 Etienne Pallier
$ ./manage.py inspectdb > models.py
497 44 Etienne Pallier
498 3 Etienne Pallier
=> YES !!!
499 3 Etienne Pallier
</pre>
500 7 Etienne Pallier
501 3 Etienne Pallier
502 48 Etienne Pallier
---
503 7 Etienne Pallier
504 3 Etienne Pallier
h3. Create a Django application pyrosapp
505 3 Etienne Pallier
506 102 Etienne Pallier
From src/ :
507 98 Etienne Pallier
508 102 Etienne Pallier
<pre>
509 1 Etienne Pallier
$ ./manage.py startapp pyrosapp
510 1 Etienne Pallier
</pre>
511 1 Etienne Pallier
512 103 Etienne Pallier
We obtain this structure:
513 103 Etienne Pallier
514 104 Etienne Pallier
<pre>
515 103 Etienne Pallier
516 103 Etienne Pallier
PYROS/
517 103 Etienne Pallier
├── private
518 103 Etienne Pallier
│   └── REQUIREMENTS.txt
519 103 Etienne Pallier
├── public
520 103 Etienne Pallier
│   └── static
521 103 Etienne Pallier
├── src
522 103 Etienne Pallier
│   ├── db.sqlite3
523 103 Etienne Pallier
│   ├── manage.py
524 103 Etienne Pallier
│   ├── pyros
525 103 Etienne Pallier
│   │   ├── __init__.py
526 103 Etienne Pallier
│   │   ├── __pycache__
527 103 Etienne Pallier
│   │   ├── settings.py
528 103 Etienne Pallier
│   │   ├── urls.py
529 103 Etienne Pallier
│   │   └── wsgi.py
530 103 Etienne Pallier
│   └── pyrosapp
531 103 Etienne Pallier
│       ├── __init__.py
532 103 Etienne Pallier
│       ├── admin.py
533 103 Etienne Pallier
│       ├── apps.py
534 103 Etienne Pallier
│       ├── migrations
535 103 Etienne Pallier
│       ├── models.py
536 103 Etienne Pallier
│       ├── tests.py
537 103 Etienne Pallier
│       └── views.py
538 103 Etienne Pallier
└── venv_py35_pyros
539 103 Etienne Pallier
540 7 Etienne Pallier
</pre>
541 1 Etienne Pallier
542 7 Etienne Pallier
---
543 7 Etienne Pallier
544 3 Etienne Pallier
h3. Replace the default pyrosapp models.py with the inspectdb generated one
545 3 Etienne Pallier
546 105 Etienne Pallier
From src/ :
547 1 Etienne Pallier
548 105 Etienne Pallier
<pre>
549 105 Etienne Pallier
$ mv models.py pyrosapp/
550 105 Etienne Pallier
</pre>
551 3 Etienne Pallier
552 7 Etienne Pallier
553 1 Etienne Pallier
554 9 Etienne Pallier
555 47 Etienne Pallier
---
556 3 Etienne Pallier
557 113 Etienne Pallier
h3. *TODO: Fix and improve the pyrosapp models.py file (generated by inspectdb)*
558 3 Etienne Pallier
559 114 Etienne Pallier
From src/pyrosapp/ :
560 1 Etienne Pallier
561 106 Etienne Pallier
Edit models.py
562 106 Etienne Pallier
563 106 Etienne Pallier
Do these changes:
564 106 Etienne Pallier
...
565 109 Etienne Pallier
566 109 Etienne Pallier
567 109 Etienne Pallier
568 109 Etienne Pallier
---
569 109 Etienne Pallier
570 111 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}II - CONFIGURATION of the Django Back Office (administration interface)%