Wiki

Version 4 (Etienne Pallier, 03/17/2016 06:43 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 3 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}INSTALLATION%
13 2 Etienne Pallier
14 2 Etienne Pallier
15 1 Etienne Pallier
16 3 Etienne Pallier
0) Create database
17 1 Etienne Pallier
18 3 Etienne Pallier
One liner:
19 3 Etienne Pallier
$ mysql -u root < pyros.sql
20 1 Etienne Pallier
21 3 Etienne Pallier
Or :
22 3 Etienne Pallier
$ mysql -u root
23 3 Etienne Pallier
mysql> create database pyros;
24 3 Etienne Pallier
mysql> use pyros;
25 3 Etienne Pallier
mysql> source pyros.sql;
26 1 Etienne Pallier
27 3 Etienne Pallier
(
28 3 Etienne Pallier
TODO:
29 3 Etienne Pallier
mysql> grant all on pyros.* to pyros@localhost identified by ‘pyros’;)
30 3 Etienne Pallier
mysql> flush privileges;
31 3 Etienne Pallier
)
32 1 Etienne Pallier
33 1 Etienne Pallier
34 1 Etienne Pallier
35 4 Etienne Pallier
---
36 3 Etienne Pallier
1) install python3.5
37 1 Etienne Pallier
38 3 Etienne Pallier
$ sudo port install python35
39 1 Etienne Pallier
40 1 Etienne Pallier
41 1 Etienne Pallier
42 4 Etienne Pallier
---
43 3 Etienne Pallier
2) create project dir
44 3 Etienne Pallier
45 3 Etienne Pallier
$ mkdir pyros
46 3 Etienne Pallier
47 3 Etienne Pallier
48 1 Etienne Pallier
 
49 3 Etienne Pallier
Exemple de bonne organisation :
50 1 Etienne Pallier
51 3 Etienne Pallier
1 projet = N applis
52 3 Etienne Pallier
(mais 1 appli peut faire partie de plusieurs projets)
53 1 Etienne Pallier
54 3 Etienne Pallier
MONPROJET/
55 3 Etienne Pallier
	src/
56 3 Etienne Pallier
		monprojet/
57 3 Etienne Pallier
		appli1
58 3 Etienne Pallier
		appli2
59 3 Etienne Pallier
60 3 Etienne Pallier
		appliN
61 3 Etienne Pallier
	public/
62 3 Etienne Pallier
	private/
63 3 Etienne Pallier
		requirements.txt
64 1 Etienne Pallier
65 1 Etienne Pallier
66 1 Etienne Pallier
67 4 Etienne Pallier
---
68 3 Etienne Pallier
3) Set needed folders (inside pyros/)
69 1 Etienne Pallier
70 3 Etienne Pallier
$ mkdir private public
71 3 Etienne Pallier
$ mkdir public/static
72 1 Etienne Pallier
73 1 Etienne Pallier
74 1 Etienne Pallier
75 4 Etienne Pallier
---
76 3 Etienne Pallier
4) create virtualenv with python3.4 dedicated to pyros project
77 3 Etienne Pallier
78 3 Etienne Pallier
$ cd pyros/
79 3 Etienne Pallier
80 3 Etienne Pallier
$ which python3.5
81 3 Etienne Pallier
/opt/local/bin/python3.5
82 3 Etienne Pallier
83 3 Etienne Pallier
$ virtualenv-3.4 venv_py35_pyros -p /opt/local/bin/python3.5
84 3 Etienne Pallier
=> creates a venv_py35_pyros/ folder inside pyros/
85 3 Etienne Pallier
86 3 Etienne Pallier
87 3 Etienne Pallier
88 3 Etienne Pallier
5) Activate venv and install needed python packages
89 3 Etienne Pallier
90 3 Etienne Pallier
$ source venv_py35_pyros/bin/activate
91 3 Etienne Pallier
92 3 Etienne Pallier
$ python -V
93 3 Etienne Pallier
Python 3.5.1
94 3 Etienne Pallier
95 3 Etienne Pallier
$ which pip
96 3 Etienne Pallier
…/pyros/venv_py35_pyros/bin/pip
97 3 Etienne Pallier
98 3 Etienne Pallier
$ pip install --upgrade pip
99 3 Etienne Pallier
Collecting pip
100 3 Etienne Pallier
  Downloading pip-8.1.1-py2.py3-none-any.whl (1.2MB)
101 3 Etienne Pallier
Installing collected packages: pip
102 3 Etienne Pallier
  Found existing installation: pip 7.1.2
103 3 Etienne Pallier
    Uninstalling pip-7.1.2:
104 3 Etienne Pallier
      Successfully uninstalled pip-7.1.2
105 3 Etienne Pallier
Successfully installed pip-8.1.1
106 3 Etienne Pallier
107 3 Etienne Pallier
$ pip install django
108 3 Etienne Pallier
Collecting django
109 3 Etienne Pallier
  Downloading Django-1.9.4-py2.py3-none-any.whl (6.6MB)
110 3 Etienne Pallier
Installing collected packages: django
111 3 Etienne Pallier
Successfully installed django-1.9.4
112 3 Etienne Pallier
113 3 Etienne Pallier
$ pip install --upgrade django
114 3 Etienne Pallier
Requirement already up-to-date: django in ./venv_py35_pyros/lib/python3.5/site-packages
115 3 Etienne Pallier
116 3 Etienne Pallier
$ pip install django-admin-tools
117 3 Etienne Pallier
Collecting django-admin-tools
118 3 Etienne Pallier
  Downloading django_admin_tools-0.7.2-py2.py3-none-any.whl (289kB)
119 3 Etienne Pallier
Installing collected packages: django-admin-tools
120 3 Etienne Pallier
Successfully installed django-admin-tools-0.7.2
121 3 Etienne Pallier
122 3 Etienne Pallier
$ pip install gunicorn
123 3 Etienne Pallier
Collecting gunicorn
124 3 Etienne Pallier
  Downloading gunicorn-19.4.5-py2.py3-none-any.whl (112kB)
125 3 Etienne Pallier
Installing collected packages: gunicorn
126 3 Etienne Pallier
Successfully installed gunicorn-19.4.5
127 3 Etienne Pallier
128 3 Etienne Pallier
$ pip install mysqlclient
129 3 Etienne Pallier
Collecting mysqlclient
130 3 Etienne Pallier
  Downloading mysqlclient-1.3.7.tar.gz (79kB)
131 3 Etienne Pallier
Building wheels for collected packages: mysqlclient
132 3 Etienne Pallier
  Running setup.py bdist_wheel for mysqlclient ... error
133 3 Etienne Pallier
134 3 Etienne Pallier
  ----------------------------------------
135 3 Etienne Pallier
  Failed building wheel for mysqlclient
136 3 Etienne Pallier
  Running setup.py clean for mysqlclient
137 3 Etienne Pallier
Failed to build mysqlclient
138 3 Etienne Pallier
Installing collected packages: mysqlclient
139 3 Etienne Pallier
  Running setup.py install for mysqlclient ... done
140 3 Etienne Pallier
Successfully installed mysqlclient-1.3.7
141 3 Etienne Pallier
142 3 Etienne Pallier
BOUH !!!
143 3 Etienne Pallier
144 3 Etienne Pallier
$ pip install --upgrade wheel
145 3 Etienne Pallier
Collecting wheel
146 3 Etienne Pallier
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
147 3 Etienne Pallier
Installing collected packages: wheel
148 3 Etienne Pallier
  Found existing installation: wheel 0.24.0
149 3 Etienne Pallier
    Uninstalling wheel-0.24.0:
150 3 Etienne Pallier
      Successfully uninstalled wheel-0.24.0
151 3 Etienne Pallier
Successfully installed wheel-0.29.0
152 3 Etienne Pallier
153 3 Etienne Pallier
$ pip uninstall mysqlclient
154 3 Etienne Pallier
155 3 Etienne Pallier
$ pip install mysqlclient
156 3 Etienne Pallier
Collecting mysqlclient
157 3 Etienne Pallier
  Using cached mysqlclient-1.3.7.tar.gz
158 3 Etienne Pallier
Building wheels for collected packages: mysqlclient
159 3 Etienne Pallier
  Running setup.py bdist_wheel for mysqlclient ... done
160 3 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/9b/06/50/d11418c26cf8f2156b13d4363b5afde8e7e75ebb8540d0228d
161 3 Etienne Pallier
Successfully built mysqlclient
162 3 Etienne Pallier
Installing collected packages: mysqlclient
163 3 Etienne Pallier
Successfully installed mysqlclient-1.3.7
164 3 Etienne Pallier
165 3 Etienne Pallier
YES !!!
166 3 Etienne Pallier
167 3 Etienne Pallier
168 3 Etienne Pallier
169 3 Etienne Pallier
$ pip install django-debug-toolbar
170 3 Etienne Pallier
Collecting django-debug-toolbar
171 3 Etienne Pallier
  Downloading django_debug_toolbar-1.4-py2.py3-none-any.whl (212kB)
172 3 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)
173 3 Etienne Pallier
Collecting sqlparse (from django-debug-toolbar)
174 3 Etienne Pallier
  Downloading sqlparse-0.1.19.tar.gz (58kB)
175 3 Etienne Pallier
Building wheels for collected packages: sqlparse
176 3 Etienne Pallier
  Running setup.py bdist_wheel for sqlparse ... done
177 3 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/7b/d4/72/6011bb100dd5fc213164e4bbee13d4e03261dd54ce6a5de6b8
178 3 Etienne Pallier
Successfully built sqlparse
179 3 Etienne Pallier
Installing collected packages: sqlparse, django-debug-toolbar
180 3 Etienne Pallier
Successfully installed django-debug-toolbar-1.4 sqlparse-0.1.19
181 3 Etienne Pallier
182 3 Etienne Pallier
$ pip install django-extensions
183 3 Etienne Pallier
Collecting django-extensions
184 3 Etienne Pallier
  Downloading django_extensions-1.6.1-py2.py3-none-any.whl (202kB)
185 3 Etienne Pallier
Collecting six>=1.2 (from django-extensions)
186 3 Etienne Pallier
  Downloading six-1.10.0-py2.py3-none-any.whl
187 3 Etienne Pallier
Installing collected packages: six, django-extensions
188 3 Etienne Pallier
Successfully installed django-extensions-1.6.1 six-1.10.0
189 3 Etienne Pallier
190 3 Etienne Pallier
$ pip install django-suit
191 3 Etienne Pallier
Collecting django-suit
192 3 Etienne Pallier
  Downloading django-suit-0.2.18.tar.gz (587kB)
193 3 Etienne Pallier
Building wheels for collected packages: django-suit
194 3 Etienne Pallier
  Running setup.py bdist_wheel for django-suit ... done
195 3 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/12/8b/9a/e02ab0ad9229881638aa040d47d77c8f562999533811927d41
196 3 Etienne Pallier
Successfully built django-suit
197 3 Etienne Pallier
Installing collected packages: django-suit
198 3 Etienne Pallier
Successfully installed django-suit-0.2.18
199 3 Etienne Pallier
200 3 Etienne Pallier
201 3 Etienne Pallier
202 3 Etienne Pallier
6) Create django project pyros
203 3 Etienne Pallier
204 3 Etienne Pallier
$ django-admin startproject pyros
205 3 Etienne Pallier
206 3 Etienne Pallier
$ tree pyros/
207 3 Etienne Pallier
pyros/
208 3 Etienne Pallier
├── manage.py
209 3 Etienne Pallier
└── pyros
210 3 Etienne Pallier
    ├── __init__.py
211 3 Etienne Pallier
    ├── settings.py
212 3 Etienne Pallier
    ├── urls.py
213 3 Etienne Pallier
    └── wsgi.py
214 3 Etienne Pallier
215 3 Etienne Pallier
216 3 Etienne Pallier
$ mv pyros src
217 3 Etienne Pallier
218 3 Etienne Pallier
$ cd src/
219 3 Etienne Pallier
220 3 Etienne Pallier
$ ./manage.py runserver
221 3 Etienne Pallier
(ou gunicorn pyros.wsgi)
222 3 Etienne Pallier
==> http://localhost:8000
223 3 Etienne Pallier
224 3 Etienne Pallier
225 3 Etienne Pallier
226 3 Etienne Pallier
8) Set Database mysql
227 3 Etienne Pallier
228 3 Etienne Pallier
Edit src/pyros/settings.py
229 3 Etienne Pallier
230 3 Etienne Pallier
DATABASES = {
231 3 Etienne Pallier
    'default': {
232 3 Etienne Pallier
        'ENGINE': 'django.db.backends.mysql',
233 3 Etienne Pallier
        'NAME': 'pyros',
234 3 Etienne Pallier
        'USER': 'root',
235 3 Etienne Pallier
        'PASSWORD': ''
236 3 Etienne Pallier
    }
237 3 Etienne Pallier
}
238 3 Etienne Pallier
239 3 Etienne Pallier
240 3 Etienne Pallier
9) Import database into django
241 3 Etienne Pallier
242 3 Etienne Pallier
cd src/
243 3 Etienne Pallier
244 3 Etienne Pallier
$ ./manage.py inspectdb > models.py
245 3 Etienne Pallier
246 3 Etienne Pallier
Traceback (most recent call last):
247 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>
248 3 Etienne Pallier
    import MySQLdb as Database
249 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>
250 3 Etienne Pallier
    import _mysql
251 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
252 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
253 3 Etienne Pallier
  Reason: image not found
254 3 Etienne Pallier
255 3 Etienne Pallier
=> BOUH !!!
256 3 Etienne Pallier
257 3 Etienne Pallier
LA SOLUTION EST ICI : http://stackoverflow.com/questions/6383310/python-mysqldb-library-not-loaded-libmysqlclient-18-dylib
258 3 Etienne Pallier
259 3 Etienne Pallier
(
260 3 Etienne Pallier
Apparemment, ceci aurait dû suffire:
261 3 Etienne Pallier
mkdir -p /usr/local/lib   
262 3 Etienne Pallier
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib
263 3 Etienne Pallier
)
264 3 Etienne Pallier
265 3 Etienne Pallier
266 3 Etienne Pallier
Mais j’ai fait ceci:
267 3 Etienne Pallier
268 3 Etienne Pallier
269 3 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
270 3 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:
271 3 Etienne Pallier
	libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
272 3 Etienne Pallier
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
273 3 Etienne Pallier
	/opt/local/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
274 3 Etienne Pallier
	/opt/local/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
275 3 Etienne Pallier
276 3 Etienne Pallier
$ locate libmysqlclient.18.dylib
277 3 Etienne Pallier
/Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib
278 3 Etienne Pallier
/Library/SystemMigration/History/Migration-68137DFB-CB6A-4FBB-81E2-11BDB5D01E48/QuarantineRoot/usr/lib/libmysqlclient.18.dylib
279 3 Etienne Pallier
280 3 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
281 3 Etienne Pallier
282 3 Etienne Pallier
283 3 Etienne Pallier
$ ./manage.py inspectdb > models.py
284 3 Etienne Pallier
285 3 Etienne Pallier
=> YES !!!
286 3 Etienne Pallier
287 3 Etienne Pallier
288 3 Etienne Pallier
289 3 Etienne Pallier
10) Create a django application pyrosapp
290 3 Etienne Pallier
291 3 Etienne Pallier
$ ./manage.py startapp pyrosapp
292 3 Etienne Pallier
293 3 Etienne Pallier
$ tree src
294 3 Etienne Pallier
src
295 3 Etienne Pallier
├── db.sqlite3
296 3 Etienne Pallier
├── manage.py
297 3 Etienne Pallier
├── pyros
298 3 Etienne Pallier
│   ├── __init__.py
299 3 Etienne Pallier
│   ├── __pycache__
300 3 Etienne Pallier
│   │   ├── __init__.cpython-35.pyc
301 3 Etienne Pallier
│   │   ├── settings.cpython-35.pyc
302 3 Etienne Pallier
│   │   ├── urls.cpython-35.pyc
303 3 Etienne Pallier
│   │   └── wsgi.cpython-35.pyc
304 3 Etienne Pallier
│   ├── settings.py
305 3 Etienne Pallier
│   ├── urls.py
306 3 Etienne Pallier
│   └── wsgi.py
307 3 Etienne Pallier
└── pyrosapp
308 3 Etienne Pallier
    ├── __init__.py
309 3 Etienne Pallier
    ├── admin.py
310 3 Etienne Pallier
    ├── apps.py
311 3 Etienne Pallier
    ├── migrations
312 3 Etienne Pallier
    │   └── __init__.py
313 3 Etienne Pallier
    ├── models.py
314 3 Etienne Pallier
    ├── tests.py
315 3 Etienne Pallier
    └── views.py
316 3 Etienne Pallier
317 3 Etienne Pallier
318 3 Etienne Pallier
11) Replace the default pyrosapp models.py with the inspectdb generated one
319 3 Etienne Pallier
320 3 Etienne Pallier
$ mv models.py pyrosapp/
321 3 Etienne Pallier
322 3 Etienne Pallier
323 3 Etienne Pallier
TODO :
324 3 Etienne Pallier
325 3 Etienne Pallier
326 3 Etienne Pallier
12) Fix and improve the inspectdb generated file models.py
327 3 Etienne Pallier
328 3 Etienne Pallier
$ cd pyrosapp/
329 3 Etienne Pallier
330 3 Etienne Pallier
$ vi models.py