Wiki

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