Project Installation

Version 197 (Etienne Pallier, 07/08/2016 07:15 pm)

1 1 Etienne Pallier
h1. Project Installation
2 1 Etienne Pallier
3 6 Etienne Pallier
4 189 Etienne Pallier
This page describes the installation phase of the Pyros software
5 189 Etienne Pallier
6 189 Etienne Pallier
7 11 Etienne Pallier
Project Development page : [[Project Development]]
8 11 Etienne Pallier
9 6 Etienne Pallier
HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting
10 6 Etienne Pallier
11 193 Etienne Pallier
{{toc}}
12 6 Etienne Pallier
13 6 Etienne Pallier
14 3 Etienne Pallier
---
15 3 Etienne Pallier
16 170 Etienne Pallier
---
17 170 Etienne Pallier
18 178 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}DATABASE SCHEMA (v0.2.1)%
19 4 Etienne Pallier
20 4 Etienne Pallier
21 192 Etienne Pallier
{{thumbnail(PYROS_PDM_v021.png, size=2000, title=Pyros data model)}}
22 4 Etienne Pallier
23 4 Etienne Pallier
24 4 Etienne Pallier
---
25 5 Etienne Pallier
26 170 Etienne Pallier
---
27 170 Etienne Pallier
28 177 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}I - PREREQUISITES%
29 177 Etienne Pallier
30 181 Paul Carensac
Pyros needs some prerequisites : 
31 177 Etienne Pallier
32 1 Etienne Pallier
* Python 3
33 181 Paul Carensac
* RabbitMQ
34 177 Etienne Pallier
* (optional) a Mysql Database server (but you can use Sqlite instead, with no installation)
35 177 Etienne Pallier
36 177 Etienne Pallier
37 177 Etienne Pallier
---
38 177 Etienne Pallier
39 177 Etienne Pallier
h3. Install a database server (only if necessary)
40 177 Etienne Pallier
41 177 Etienne Pallier
_If the MySql database server is already installed on your computer, skip this section_
42 177 Etienne Pallier
43 177 Etienne Pallier
By default, Pyros uses Mysql, but this implies that you have to install the Mysql database server...
44 177 Etienne Pallier
45 177 Etienne Pallier
Thus, to make things easier, avoid Mysql installation by using Sqlite instead as the database server (which will need no installation at all) :
46 177 Etienne Pallier
47 177 Etienne Pallier
=> *For this, just edit the file PYROS/src/pyros/settings.py and set MYSQL variable to False, and that's it. You can go to next section*
48 177 Etienne Pallier
49 177 Etienne Pallier
Now, if you really want to use Mysql (which is the default), you will need to install it (only if not already installed), so keep reading.
50 177 Etienne Pallier
51 177 Etienne Pallier
_(Skip this if you are using Sqlite instead of MySql)_
52 177 Etienne Pallier
53 177 Etienne Pallier
 * Linux Ubuntu
54 177 Etienne Pallier
<pre>
55 177 Etienne Pallier
First, update your system:
56 177 Etienne Pallier
$ sudo apt-get update
57 177 Etienne Pallier
58 177 Etienne Pallier
$ sudo apt-get install mysql-server
59 177 Etienne Pallier
$ sudo apt-get install mysql-client
60 177 Etienne Pallier
61 177 Etienne Pallier
$ sudo apt-get install libmysqlclient-dev
62 177 Etienne Pallier
(needed for python package mysqlclient)
63 177 Etienne Pallier
</pre>
64 177 Etienne Pallier
65 177 Etienne Pallier
 * Linux CentOS : cf https://www.howtoforge.com/apache_php_mysql_on_centos_7_lamp#-installing-mysql-
66 177 Etienne Pallier
<pre>
67 177 Etienne Pallier
First, update your system:
68 177 Etienne Pallier
$ sudo yum update yum
69 177 Etienne Pallier
$ sudo yum update kernel
70 177 Etienne Pallier
$ sudo yum update
71 177 Etienne Pallier
72 177 Etienne Pallier
$ sudo yum install mariadb-server 
73 177 Etienne Pallier
$ sudo yum install mariadb
74 177 Etienne Pallier
75 177 Etienne Pallier
$ sudo yum install mariadb-devel
76 177 Etienne Pallier
(needed for python package mysqlclient)
77 177 Etienne Pallier
78 177 Etienne Pallier
$ sudo systemctl start mariadb.service
79 177 Etienne Pallier
80 177 Etienne Pallier
$ sudo systemctl enable mariadb.service
81 177 Etienne Pallier
=> Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
82 177 Etienne Pallier
83 177 Etienne Pallier
$ sudo mysql_secure_installation
84 177 Etienne Pallier
</pre>
85 177 Etienne Pallier
86 177 Etienne Pallier
 * Mac OS X
87 177 Etienne Pallier
Install XAMPP
88 177 Etienne Pallier
(but you could also use the pre-installed Mac OS MySql, or install MySql from macport)
89 177 Etienne Pallier
<pre>
90 177 Etienne Pallier
TODO:
91 177 Etienne Pallier
</pre>
92 177 Etienne Pallier
93 177 Etienne Pallier
 * Windows (tested with Windows 7)
94 177 Etienne Pallier
95 177 Etienne Pallier
<pre>
96 177 Etienne Pallier
Download and install the newest version on https://dev.mysql.com/downloads/installer/
97 177 Etienne Pallier
98 177 Etienne Pallier
Once installed, launch MySQL Installer. Clic on 'Add...' on the right.
99 177 Etienne Pallier
In MySQLServers section, choose the newest, then clic on next.
100 177 Etienne Pallier
Install and configure the server (just follow the installation guide).
101 177 Etienne Pallier
102 177 Etienne Pallier
Then launch mysql (via the Windows menu).
103 177 Etienne Pallier
</pre>
104 177 Etienne Pallier
105 177 Etienne Pallier
106 177 Etienne Pallier
---
107 177 Etienne Pallier
108 177 Etienne Pallier
h3. Install Python3 + pip + virtualenv (only if necessary)
109 177 Etienne Pallier
110 177 Etienne Pallier
_If Python 3 is already installed on your computer, skip this section_
111 177 Etienne Pallier
112 177 Etienne Pallier
113 177 Etienne Pallier
 * Linux (CentOS 7.1, main target): (python35 not yet available as rpm)
114 177 Etienne Pallier
<pre>
115 177 Etienne Pallier
$ sudo yum update yum
116 177 Etienne Pallier
$ sudo yum update kernel
117 177 Etienne Pallier
$ sudo yum update
118 177 Etienne Pallier
119 177 Etienne Pallier
$ sudo yum install python34
120 177 Etienne Pallier
$ python3.4 -V
121 177 Etienne Pallier
Python 3.4.3
122 177 Etienne Pallier
123 177 Etienne Pallier
$ sudo yum install python34-devel
124 177 Etienne Pallier
(needed for python package mysqlclient)
125 177 Etienne Pallier
126 177 Etienne Pallier
$ sudo yum update python-setuptools
127 177 Etienne Pallier
$ easy_install --version
128 177 Etienne Pallier
setuptools 0.9.8
129 177 Etienne Pallier
$ sudo easy_install pip
130 177 Etienne Pallier
$ pip --version
131 177 Etienne Pallier
pip 8.1.1 from /usr/lib/python2.7/site-packages/pip-8.1.1-py2.7.egg (python 2.7)
132 177 Etienne Pallier
133 177 Etienne Pallier
134 177 Etienne Pallier
$ sudo pip install virtualenv
135 177 Etienne Pallier
$ virtualenv --version
136 177 Etienne Pallier
15.0.1
137 177 Etienne Pallier
</pre>
138 177 Etienne Pallier
139 197 Etienne Pallier
Necessary for "lxml" python package:
140 197 Etienne Pallier
$ sudo yum install libxml2
141 197 Etienne Pallier
$ sudo yum install libxml2-devel
142 197 Etienne Pallier
$ sudo yum install libxslt
143 197 Etienne Pallier
$ sudo yum install libxslt-devel
144 197 Etienne Pallier
145 197 Etienne Pallier
146 197 Etienne Pallier
147 177 Etienne Pallier
 * Linux (Ubuntu) :
148 177 Etienne Pallier
<pre>
149 177 Etienne Pallier
$ sudo add-apt-repository ppa:fkrull/deadsnakes
150 177 Etienne Pallier
$ sudo apt-get update
151 177 Etienne Pallier
$ sudo apt-get install python3.5
152 177 Etienne Pallier
153 177 Etienne Pallier
$ sudo apt-get install python3.5-dev
154 177 Etienne Pallier
(needed for python package mysqlclient)
155 177 Etienne Pallier
156 177 Etienne Pallier
$ sudo pip install virtualenv
157 177 Etienne Pallier
</pre>
158 177 Etienne Pallier
159 177 Etienne Pallier
160 177 Etienne Pallier
 * Mac OS X :
161 177 Etienne Pallier
162 177 Etienne Pallier
  * From binary (Mac OS native application)
163 177 Etienne Pallier
(TODO:)
164 177 Etienne Pallier
165 177 Etienne Pallier
  * From MacPort
166 177 Etienne Pallier
167 177 Etienne Pallier
   * a) install macport
168 177 Etienne Pallier
(TODO:)
169 177 Etienne Pallier
170 177 Etienne Pallier
   * b) install the "port" python35
171 177 Etienne Pallier
<pre>
172 177 Etienne Pallier
$ sudo port install python35
173 177 Etienne Pallier
</pre>
174 177 Etienne Pallier
175 177 Etienne Pallier
176 177 Etienne Pallier
 * Windows (tested with Windows 7) :
177 177 Etienne Pallier
(TODO: test with Windows 10)
178 177 Etienne Pallier
<pre>
179 177 Etienne Pallier
Go to https://www.python.org/downloads/windows/ , choose the wanted version
180 177 Etienne Pallier
On the wanted version’s page, download Windows x86 executable installer
181 177 Etienne Pallier
182 177 Etienne Pallier
Run the executable
183 177 Etienne Pallier
    * On the first page, check "Add python3.5 to PATH"
184 177 Etienne Pallier
    * Choose "Install now" option
185 177 Etienne Pallier
186 177 Etienne Pallier
Open cmd (windows + R, cmd) :
187 177 Etienne Pallier
 $ python -m pip install --upgrade pip
188 177 Etienne Pallier
 $ pip install virtualenv
189 177 Etienne Pallier
</pre>
190 177 Etienne Pallier
191 1 Etienne Pallier
---
192 181 Paul Carensac
193 181 Paul Carensac
h3. Install RabbitMQ
194 181 Paul Carensac
195 181 Paul Carensac
RabbitMQ is a message queue server used by Celery to handle tasks queues.
196 181 Paul Carensac
197 181 Paul Carensac
 * Ubuntu (the server is automatically started) :
198 181 Paul Carensac
<pre>
199 181 Paul Carensac
$ sudo apt-get install rabbitmq-server
200 181 Paul Carensac
</pre>
201 183 Paul Carensac
202 195 Etienne Pallier
 * CentOS :
203 195 Etienne Pallier
<pre>
204 195 Etienne Pallier
$ sudo yum install rabbitmq-server
205 196 Etienne Pallier
206 196 Etienne Pallier
Installation :
207 196 Etienne Pallier
 rabbitmq-server                                                           noarch                          3.3.5-17.el7
208 196 Etienne Pallier
Installation pour dépendances :
209 196 Etienne Pallier
 erlang-asn1                                                               x86_64                          R16B-03.16.el7
210 195 Etienne Pallier
</pre>
211 195 Etienne Pallier
212 183 Paul Carensac
 * MacOS :
213 183 Paul Carensac
<pre>
214 194 Etienne Pallier
With MacPort:
215 194 Etienne Pallier
$ sudo port install rabbitmq-server
216 194 Etienne Pallier
--->  Installing erlang @18.2.1_1+hipe+ssl
217 194 Etienne Pallier
...
218 194 Etienne Pallier
--->  Installing rabbitmq-server @3.5.7_0
219 194 Etienne Pallier
--->  Activating rabbitmq-server @3.5.7_0
220 194 Etienne Pallier
...
221 183 Paul Carensac
</pre>
222 183 Paul Carensac
223 183 Paul Carensac
 * Windows :
224 191 Paul Carensac
225 191 Paul Carensac
  * Take the wanted Erlang version at http://www.erlang.org/downloads and install it (required)
226 191 Paul Carensac
  * Take the wanted RabbitMQ version at https://www.rabbitmq.com/install-windows.html and install it. Then the server will run automatically
227 191 Paul Carensac
228 191 Paul Carensac
229 177 Etienne Pallier
230 177 Etienne Pallier
---
231 177 Etienne Pallier
232 179 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}II - GET THE PYROS SOFTWARE%
233 5 Etienne Pallier
234 125 Etienne Pallier
h3. Authenticate to https://gitlab.irap.omp.eu/epallier/pyros
235 125 Etienne Pallier
236 125 Etienne Pallier
In order to get this software, you must first authenticate on the IRAP gitlab.
237 125 Etienne Pallier
238 125 Etienne Pallier
For this, just go to https://gitlab.irap.omp.eu/epallier/pyros
239 125 Etienne Pallier
and either sign in with your LDAP account (if you are from IRAP),
240 125 Etienne Pallier
or register via the "Sign up" form.
241 5 Etienne Pallier
242 113 Etienne Pallier
h3. Software structure
243 5 Etienne Pallier
244 156 Paul Carensac
Once you have fetched the project, you should obtain AT LEAST this structure:
245 5 Etienne Pallier
246 5 Etienne Pallier
<pre>
247 5 Etienne Pallier
248 5 Etienne Pallier
PYROS/
249 5 Etienne Pallier
├── install/
250 5 Etienne Pallier
│   └── REQUIREMENTS.txt
251 5 Etienne Pallier
│   └── INSTALLATION.txt
252 5 Etienne Pallier
├── public/
253 5 Etienne Pallier
│   └── static/
254 5 Etienne Pallier
├── src/
255 5 Etienne Pallier
│   ├── manage.py
256 5 Etienne Pallier
│   ├── pyros/
257 5 Etienne Pallier
│   │   ├── __init__.py
258 5 Etienne Pallier
│   │   ├── __pycache__
259 5 Etienne Pallier
│   │   ├── settings.py
260 5 Etienne Pallier
│   │   ├── urls.py
261 5 Etienne Pallier
│   │   └── wsgi.py
262 5 Etienne Pallier
│   └── pyrosapp/
263 5 Etienne Pallier
│       ├── __init__.py
264 5 Etienne Pallier
│       ├── admin.py
265 5 Etienne Pallier
│       ├── apps.py
266 5 Etienne Pallier
│       ├── migrations
267 5 Etienne Pallier
│       ├── models.py
268 5 Etienne Pallier
│       ├── tests.py
269 5 Etienne Pallier
│       └── views.py
270 5 Etienne Pallier
271 1 Etienne Pallier
272 1 Etienne Pallier
</pre>
273 1 Etienne Pallier
274 112 Etienne Pallier
h3. Browse the code (from gitlab)
275 111 Etienne Pallier
276 111 Etienne Pallier
https://gitlab.irap.omp.eu/epallier/pyros/tree/master
277 111 Etienne Pallier
278 113 Etienne Pallier
h3. Download it (static version, not synchronized)
279 111 Etienne Pallier
280 114 Etienne Pallier
You can download the current version of the software.
281 114 Etienne Pallier
282 115 Etienne Pallier
Go to https://gitlab.irap.omp.eu/epallier/pyros/tree/master
283 115 Etienne Pallier
284 115 Etienne Pallier
Click on "Download zip" on the up right hand corner.
285 115 Etienne Pallier
286 115 Etienne Pallier
Double-click on it to unzip it.
287 115 Etienne Pallier
288 115 Etienne Pallier
You should get a "pyros.git" folder.
289 115 Etienne Pallier
290 116 Etienne Pallier
In this documentation, this software folder will be referenced as "PYROS".
291 115 Etienne Pallier
292 118 Etienne Pallier
(you can rename "pyros.git" as "PYROS" if you want : "mv pyros.git PYROS")
293 114 Etienne Pallier
294 113 Etienne Pallier
h3. Get it from GIT (dynamic version, synchronized)
295 114 Etienne Pallier
296 122 Etienne Pallier
(If you are using Windows, you must first get the git software, see below "Get git for Windows")
297 122 Etienne Pallier
298 114 Etienne Pallier
By getting the software from git, you will get a dynamically synchronized version,
299 114 Etienne Pallier
which means that you will be able to update your version as soon as a new version is available
300 114 Etienne Pallier
(with the command : "git pull").
301 111 Etienne Pallier
302 111 Etienne Pallier
* From Eclipse : See below, section "NOTES FOR ECLIPSE USERS"
303 111 Etienne Pallier
304 111 Etienne Pallier
* From the terminal
305 5 Etienne Pallier
306 5 Etienne Pallier
<pre>
307 5 Etienne Pallier
git clone https://gitlab.irap.omp.eu/epallier/pyros.git PYROS
308 1 Etienne Pallier
</pre>
309 86 Etienne Pallier
310 86 Etienne Pallier
_(or also : git clone git@gitlab.irap.omp.eu:epallier/pyros.git PYROS)_
311 5 Etienne Pallier
312 126 Etienne Pallier
If you ever get this error message :
313 126 Etienne Pallier
<pre>
314 126 Etienne Pallier
fatal: unable to access 'https://gitlab.irap.omp.eu/epallier/pyros.git/': Peer's certificate issuer has been marked as not trusted by the user.
315 126 Etienne Pallier
</pre>
316 126 Etienne Pallier
317 126 Etienne Pallier
Then, type this command (and then run again the git clone command):
318 126 Etienne Pallier
<pre>
319 126 Etienne Pallier
$ git config --global http.sslVerify false
320 126 Etienne Pallier
</pre>
321 126 Etienne Pallier
322 126 Etienne Pallier
(Also, the first time you get the project, it will ask you for a login and password)
323 124 Etienne Pallier
324 5 Etienne Pallier
This creates a PYROS/ folder containing the project (with a .git/ subfolder for synchronization with the git repository)
325 1 Etienne Pallier
326 1 Etienne Pallier
327 122 Etienne Pallier
h4. (Windows only) : Get git for Windows
328 122 Etienne Pallier
329 122 Etienne Pallier
 * Download git at https://git-scm.com/download/win
330 121 Paul Carensac
 * Run setup (keep default configurations)
331 121 Paul Carensac
 * Once installed, open cmd
332 121 Paul Carensac
<pre>
333 121 Paul Carensac
$ git config --global http.sslVerify false
334 1 Etienne Pallier
</pre>
335 121 Paul Carensac
336 168 Etienne Pallier
You can now use your git from the cmd or the graphic client !
337 168 Etienne Pallier
338 168 Etienne Pallier
339 169 Etienne Pallier
340 169 Etienne Pallier
341 169 Etienne Pallier
---
342 169 Etienne Pallier
343 169 Etienne Pallier
---
344 169 Etienne Pallier
345 186 Paul Carensac
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}III - INSTALLATION OF NEEDED PROJECT DEPENDENCIES%
346 166 Etienne Pallier
347 186 Paul Carensac
---
348 186 Paul Carensac
349 186 Paul Carensac
h3. Install Comet
350 186 Paul Carensac
351 186 Paul Carensac
Comet is a broker to receive and send VOEvents (https://github.com/jdswinbank/Comet/tree/py3)
352 187 Paul Carensac
You MUST have your virtualenv activated (*source venv_py3_pyros/bin/activate* in your 'private/' directory)
353 186 Paul Carensac
Documentation is available here : http://comet.readthedocs.io/en/stable/installation.html
354 186 Paul Carensac
355 186 Paul Carensac
 * Ubuntu :
356 186 Paul Carensac
357 186 Paul Carensac
<pre>
358 186 Paul Carensac
# You can do this anywhere on your computer
359 1 Etienne Pallier
$ git clone https://github.com/jdswinbank/Comet.git
360 1 Etienne Pallier
$ cd Comet
361 1 Etienne Pallier
$ (sudo ?) python setup.py install
362 1 Etienne Pallier
363 1 Etienne Pallier
# Now you can test it, no failure are expected, please contact the dev team for help
364 1 Etienne Pallier
$ trial comet
365 1 Etienne Pallier
</pre>
366 1 Etienne Pallier
367 1 Etienne Pallier
368 1 Etienne Pallier
 * MacOS :
369 1 Etienne Pallier
<pre>
370 1 Etienne Pallier
TODO:
371 1 Etienne Pallier
</pre>
372 1 Etienne Pallier
373 1 Etienne Pallier
 * Windows :
374 1 Etienne Pallier
<pre>
375 1 Etienne Pallier
TODO:
376 1 Etienne Pallier
</pre>
377 190 Paul Carensac
378 190 Paul Carensac
---
379 190 Paul Carensac
380 190 Paul Carensac
Install the needed Project dependencies and the database (within a Python virtual environment)
381 190 Paul Carensac
382 190 Paul Carensac
Go into the PYROS/install/ folder and Run the install_requirements.sh script.
383 190 Paul Carensac
384 190 Paul Carensac
(You will be prompted to enter a username, an email, and a password for the superuser)
385 190 Paul Carensac
386 190 Paul Carensac
* Mac and Linux:
387 190 Paul Carensac
<pre>
388 190 Paul Carensac
./install_requirements.sh
389 190 Paul Carensac
</pre>
390 190 Paul Carensac
391 190 Paul Carensac
* Windows:
392 190 Paul Carensac
<pre>
393 190 Paul Carensac
install_requirements_windows.bat
394 190 Paul Carensac
</pre>
395 190 Paul Carensac
396 190 Paul Carensac
_If something goes wrong, install manually each package (see section "MANUAL INSTALLATION OF PYTHON PACKAGES, ONE BY ONE")_
397 186 Paul Carensac
398 98 Etienne Pallier
399 9 Etienne Pallier
---
400 9 Etienne Pallier
401 9 Etienne Pallier
h3. (Eclipse only) Set the Python3 virtual environment as the project interpreter
402 9 Etienne Pallier
403 65 Etienne Pallier
See below, in section "NOTES FOR ECLIPSE USERS"
404 9 Etienne Pallier
405 1 Etienne Pallier
---
406 1 Etienne Pallier
407 170 Etienne Pallier
---
408 170 Etienne Pallier
409 17 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}IV - TEST%
410 17 Etienne Pallier
411 108 Etienne Pallier
412 90 Etienne Pallier
(Tests are classes declared in all apps' test.py file. The test classes inherit from django.test.TestCase)
413 17 Etienne Pallier
414 17 Etienne Pallier
You can run the tests suite, just to be sure that the software is well installed.
415 17 Etienne Pallier
416 19 Etienne Pallier
h3. From Terminal
417 19 Etienne Pallier
418 19 Etienne Pallier
419 1 Etienne Pallier
<pre>
420 1 Etienne Pallier
421 94 Etienne Pallier
$ cd PYROS/
422 20 Etienne Pallier
423 159 Paul Carensac
$ ./pyrosrun test
424 94 Etienne Pallier
Ran 5 tests in 0.093s
425 21 Etienne Pallier
OK
426 17 Etienne Pallier
</pre>
427 19 Etienne Pallier
428 160 Paul Carensac
h3. From Eclipse
429 1 Etienne Pallier
430 77 Etienne Pallier
See below, in section "NOTES FOR ECLIPSE USERS"
431 25 Paul Carensac
432 25 Paul Carensac
433 160 Paul Carensac
h3. Custom commands
434 27 Paul Carensac
435 25 Paul Carensac
$ [./manage.py] test app.tests                           # Run tests for the application 'app'
436 25 Paul Carensac
$ [./manage.py] test app.tests.ModelTests                # Run test methods declared in the class app.tests.ModelTests
437 25 Paul Carensac
$ [./manage.py] test app.tests.ModelTests.test_method    # Only run the method test_method declared in app.tests.ModelTests
438 33 Etienne Pallier
439 33 Etienne Pallier
440 1 Etienne Pallier
---
441 1 Etienne Pallier
442 170 Etienne Pallier
---
443 170 Etienne Pallier
444 92 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}V - RUN%
445 75 Etienne Pallier
446 109 Etienne Pallier
447 75 Etienne Pallier
* From the terminal
448 75 Etienne Pallier
449 75 Etienne Pallier
<pre>
450 75 Etienne Pallier
451 95 Etienne Pallier
$ cd PYROS/
452 1 Etienne Pallier
453 158 Paul Carensac
$ ./pyrosrun server
454 93 Paul Carensac
</pre>
455 75 Etienne Pallier
456 158 Paul Carensac
Now, go to "http://localhost:8000/admin" in your browser
457 91 Etienne Pallier
458 158 Paul Carensac
(and login as "pyros" with the password 'DjangoPyros')
459 105 Etienne Pallier
460 91 Etienne Pallier
(Ctrl-c to stop)
461 91 Etienne Pallier
462 91 Etienne Pallier
463 75 Etienne Pallier
464 106 Etienne Pallier
* From Eclipse : see below, in section "NOTES FOR ECLIPSE USERS"
465 75 Etienne Pallier
466 75 Etienne Pallier
467 1 Etienne Pallier
---
468 1 Etienne Pallier
469 170 Etienne Pallier
---
470 170 Etienne Pallier
471 33 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}NOTES FOR ECLIPSE USERS%
472 35 Etienne Pallier
473 35 Etienne Pallier
0) Install Eclipse (if necessary)
474 35 Etienne Pallier
475 35 Etienne Pallier
Get the Eclipse version for Php
476 35 Etienne Pallier
477 35 Etienne Pallier
Install the plug-in pydev (via install new software, add http://pydev.org/updates)
478 35 Etienne Pallier
479 35 Etienne Pallier
Install the django template editor (via install new software, add http://eclipse.kacprzak.org/updates)
480 35 Etienne Pallier
481 35 Etienne Pallier
1) Deactivate CA certificate verification
482 35 Etienne Pallier
483 35 Etienne Pallier
Window -> Preferences -> Team -> git -> configuration -> Add entry
484 35 Etienne Pallier
485 35 Etienne Pallier
Key = http.sslVerify
486 35 Etienne Pallier
Value = false
487 35 Etienne Pallier
488 35 Etienne Pallier
2) Fetch the project
489 35 Etienne Pallier
490 35 Etienne Pallier
File/Import project from git
491 35 Etienne Pallier
492 35 Etienne Pallier
Select repository source: Clone URI: https://gitlab.irap.omp.eu/epallier/pyros.git
493 35 Etienne Pallier
494 35 Etienne Pallier
Directory: 
495 35 Etienne Pallier
par défaut, il propose : /Users/epallier/git/pyros
496 35 Etienne Pallier
mais on peut le mettre ailleurs (c'est ce que j'ai fait)
497 35 Etienne Pallier
498 35 Etienne Pallier
initial branch: master
499 35 Etienne Pallier
remote name: origin
500 35 Etienne Pallier
501 35 Etienne Pallier
Import as general project
502 35 Etienne Pallier
503 35 Etienne Pallier
Project name: PYROS
504 35 Etienne Pallier
505 35 Etienne Pallier
506 35 Etienne Pallier
3) Configure the project
507 35 Etienne Pallier
508 35 Etienne Pallier
The project is created. Now, you have to set it as a «PyDev » and a « Django » project.
509 35 Etienne Pallier
510 35 Etienne Pallier
clic droit sur le projet / PyDev / set as a PyDev project
511 35 Etienne Pallier
512 35 Etienne Pallier
clic droit sur le projet / PyDev / set as a Django project
513 35 Etienne Pallier
514 35 Etienne Pallier
clic droit sur le projet : on doit maintenant avoir un sous-menu Django
515 35 Etienne Pallier
516 35 Etienne Pallier
clic droit sur le dossier src / PyDev / set as source folder (add to PYTHONPATH)
517 35 Etienne Pallier
518 35 Etienne Pallier
clic droit sur projet / Properties / Pydev-Django :
519 35 Etienne Pallier
  - Django manage.py : src/manage.py
520 35 Etienne Pallier
  - Django settings module : pyros.settings
521 35 Etienne Pallier
522 35 Etienne Pallier
523 35 Etienne Pallier
4) Set Code style
524 35 Etienne Pallier
525 35 Etienne Pallier
Window/Preferences : Pydev / Editor
526 35 Etienne Pallier
- Auto Imports : uncheck « Do auto import »
527 35 Etienne Pallier
- Code style:
528 35 Etienne Pallier
	- Locals … : camelCase
529 35 Etienne Pallier
	- Methods : camelCase() with first lower
530 35 Etienne Pallier
- Code style / Code Formatter: activer « use autopep8.py for code formatting »
531 35 Etienne Pallier
- Tabs : Tab length : 4
532 35 Etienne Pallier
533 67 Etienne Pallier
5) Now, once the Python3 virtual environment is installed (see above),
534 66 Etienne Pallier
set it in Eclipse as the project interpreter:
535 66 Etienne Pallier
536 68 Etienne Pallier
Right clic on the project / Properties / PyDev - Interpreter/Grammar :
537 66 Etienne Pallier
Grammar version : 3
538 66 Etienne Pallier
539 66 Etienne Pallier
Interpreter : click on « click here to configure an interpreter not listed »
540 66 Etienne Pallier
541 66 Etienne Pallier
click on « New... » :
542 66 Etienne Pallier
- Interpreter name : venv_py35_pyros
543 66 Etienne Pallier
- Interpreter executable : click on « Browse »
544 66 Etienne Pallier
	Select your virtualenv python35 executable (private/venv_py35_pyros/bin/python3.5)
545 66 Etienne Pallier
	click OK
546 66 Etienne Pallier
547 66 Etienne Pallier
*Now, a last thing to do so that Pydev finds Django:*
548 66 Etienne Pallier
549 66 Etienne Pallier
In the Python interpreters list, select your virtual env (venv_py35_pyros)
550 66 Etienne Pallier
551 66 Etienne Pallier
Click on the tab "Libraries"
552 66 Etienne Pallier
553 66 Etienne Pallier
clic on 'New folder', then select your virtualenv's lib/python3.5/site-packages folder
554 66 Etienne Pallier
555 66 Etienne Pallier
OK
556 66 Etienne Pallier
557 66 Etienne Pallier
Interpreter: select now venv_py35_pyros from the list
558 66 Etienne Pallier
559 66 Etienne Pallier
OK
560 62 Etienne Pallier
561 78 Etienne Pallier
6) Test
562 1 Etienne Pallier
563 78 Etienne Pallier
* Right-clic on the project / Django / Run Django tests
564 78 Etienne Pallier
565 78 Etienne Pallier
* Right-clic on the project / Django / Custom command / ...
566 78 Etienne Pallier
567 78 Etienne Pallier
568 78 Etienne Pallier
7) Run
569 70 Etienne Pallier
570 70 Etienne Pallier
Right clic on project -> Django/Custom command/runserver
571 70 Etienne Pallier
572 70 Etienne Pallier
Error on Ubuntu :
573 70 Etienne Pallier
574 70 Etienne Pallier
<pre>
575 70 Etienne Pallier
576 70 Etienne Pallier
Traceback (most recent call last):
577 70 Etienne Pallier
  File "/home/carens_p/git/pyros/src/manage.py", line 8, in <module>
578 70 Etienne Pallier
    from django.core.management import execute_from_command_line
579 70 Etienne Pallier
ImportError: No module named 'django'
580 70 Etienne Pallier
581 70 Etienne Pallier
</pre>
582 70 Etienne Pallier
583 70 Etienne Pallier
Project -> Properties -> Pydev interpreter -> Clic here to configure an interpreter not listed
584 70 Etienne Pallier
585 70 Etienne Pallier
select venv_py35_pyros
586 70 Etienne Pallier
587 70 Etienne Pallier
In Libraries, clic on 'New folder', then select your virtualenv's lib/python3.5/site-packages folder.
588 70 Etienne Pallier
589 70 Etienne Pallier
OK -> re-select venv_py35_pyros in 'Interpreter' dropdown menu
590 70 Etienne Pallier
591 70 Etienne Pallier
Then right clic on project -> Django/Custom command/runserver
592 70 Etienne Pallier
593 70 Etienne Pallier
check http://localhost:8000/
594 70 Etienne Pallier
595 70 Etienne Pallier
596 62 Etienne Pallier
---
597 62 Etienne Pallier
598 62 Etienne Pallier
---
599 62 Etienne Pallier
600 81 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}MANUAL INSTALLATION OF PYTHON PACKAGES ONE BY ONE%
601 81 Etienne Pallier
602 172 Etienne Pallier
*Follow these steps only if the previous guided and nearly automatic installation did not work for you*
603 100 Etienne Pallier
604 172 Etienne Pallier
605 174 Etienne Pallier
h3. (Only if using Mysql) Create the database "pyros" and the pyros user
606 174 Etienne Pallier
607 174 Etienne Pallier
Only if you are using Mysql, you need to create an empty database "pyros"
608 174 Etienne Pallier
(which will be filled automatically by django)
609 174 Etienne Pallier
610 174 Etienne Pallier
<pre>
611 174 Etienne Pallier
$ mysql -u root -p
612 174 Etienne Pallier
(enter your root password)
613 174 Etienne Pallier
614 174 Etienne Pallier
$ mysql> create database if not exists pyros;
615 174 Etienne Pallier
</pre>
616 174 Etienne Pallier
617 174 Etienne Pallier
The user creation depends on your MySQL version :
618 174 Etienne Pallier
619 174 Etienne Pallier
 * 5.7 and above :
620 174 Etienne Pallier
<pre>
621 174 Etienne Pallier
$ mysql> DROP USER IF EXISTS pyros;
622 174 Etienne Pallier
$ mysql> CREATE USER 'pyros' IDENTIFIED BY 'DjangoPyros';
623 174 Etienne Pallier
$ mysql> GRANT ALL PRIVILEGES ON pyros.* TO pyros;
624 174 Etienne Pallier
</pre>
625 174 Etienne Pallier
626 174 Etienne Pallier
 * under 5.7 :
627 174 Etienne Pallier
<pre>
628 174 Etienne Pallier
$ mysql> GRANT USAGE ON *.* TO 'pyros';
629 174 Etienne Pallier
$ mysql> DROP USER 'pyros';
630 174 Etienne Pallier
$ mysql> CREATE USER 'pyros' IDENTIFIED BY 'DjangoPyros';
631 174 Etienne Pallier
$ mysql> GRANT ALL PRIVILEGES ON pyros.* TO pyros;
632 174 Etienne Pallier
</pre>
633 174 Etienne Pallier
634 174 Etienne Pallier
If none of these solution work, check on the internet to create a user named pyros with the password DjangoPyros.
635 174 Etienne Pallier
636 100 Etienne Pallier
h3. Create a Python3 virtual environment dedicated to the project (inside the project folder)
637 100 Etienne Pallier
638 100 Etienne Pallier
<pre>
639 100 Etienne Pallier
640 100 Etienne Pallier
$ mkdir private/
641 100 Etienne Pallier
642 100 Etienne Pallier
$ cd private/
643 100 Etienne Pallier
644 100 Etienne Pallier
$ which python3.5 ("where python" for windows)
645 100 Etienne Pallier
/opt/local/bin/python3.5
646 100 Etienne Pallier
647 100 Etienne Pallier
$ virtualenv venv_py35_pyros -p /opt/local/bin/python3.5
648 100 Etienne Pallier
=> creates a venv_py35_pyros/ folder inside PYROS/private/
649 100 Etienne Pallier
650 100 Etienne Pallier
</pre>
651 100 Etienne Pallier
652 100 Etienne Pallier
653 100 Etienne Pallier
---
654 100 Etienne Pallier
655 100 Etienne Pallier
h3. Activate the python virtual environment (from inside the project)
656 100 Etienne Pallier
657 100 Etienne Pallier
<pre>
658 100 Etienne Pallier
659 100 Etienne Pallier
$ pwd
660 100 Etienne Pallier
.../PYROS/private
661 100 Etienne Pallier
662 100 Etienne Pallier
$ source ./venv_py35_pyros/bin/activate (venv_py35_pyros/Scripts/activate on Windows)
663 100 Etienne Pallier
664 100 Etienne Pallier
</pre>
665 100 Etienne Pallier
666 100 Etienne Pallier
---
667 100 Etienne Pallier
668 100 Etienne Pallier
h3. Install needed python packages
669 100 Etienne Pallier
670 81 Etienne Pallier
Check that the virtual environment is activated
671 81 Etienne Pallier
<pre>
672 81 Etienne Pallier
$ python -V
673 81 Etienne Pallier
Python 3...
674 81 Etienne Pallier
675 81 Etienne Pallier
$ which pip
676 81 Etienne Pallier
.../PYROS/venv_py35_pyros/bin/pip
677 81 Etienne Pallier
</pre>
678 81 Etienne Pallier
679 81 Etienne Pallier
680 81 Etienne Pallier
Upgrade pip to last version available:
681 81 Etienne Pallier
<pre>
682 81 Etienne Pallier
$ pip install --upgrade pip
683 81 Etienne Pallier
Collecting pip
684 81 Etienne Pallier
  Downloading pip-8.1.1-py2.py3-none-any.whl (1.2MB)
685 81 Etienne Pallier
Installing collected packages: pip
686 81 Etienne Pallier
  Found existing installation: pip 7.1.2
687 81 Etienne Pallier
    Uninstalling pip-7.1.2:
688 81 Etienne Pallier
      Successfully uninstalled pip-7.1.2
689 81 Etienne Pallier
Successfully installed pip-8.1.1
690 81 Etienne Pallier
691 81 Etienne Pallier
Upgrade wheel to last version available:
692 81 Etienne Pallier
$ pip install --upgrade wheel
693 81 Etienne Pallier
Collecting wheel
694 81 Etienne Pallier
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
695 81 Etienne Pallier
Installing collected packages: wheel
696 81 Etienne Pallier
  Found existing installation: wheel 0.24.0
697 81 Etienne Pallier
    Uninstalling wheel-0.24.0:
698 81 Etienne Pallier
      Successfully uninstalled wheel-0.24.0
699 81 Etienne Pallier
Successfully installed wheel-0.29.0
700 81 Etienne Pallier
701 81 Etienne Pallier
</pre>
702 81 Etienne Pallier
703 81 Etienne Pallier
Go into the install/ folder:
704 81 Etienne Pallier
<pre>
705 81 Etienne Pallier
$ cd .../PYROS/install/
706 81 Etienne Pallier
</pre>
707 81 Etienne Pallier
708 84 Etienne Pallier
Install all the needed python packages at once:
709 85 Etienne Pallier
<pre>
710 1 Etienne Pallier
$ pip install -r REQUIREMENTS.txt
711 85 Etienne Pallier
</pre>
712 84 Etienne Pallier
713 84 Etienne Pallier
If something goes wrong, install them one by one:
714 62 Etienne Pallier
715 62 Etienne Pallier
  * *Install Django* :
716 62 Etienne Pallier
<pre>
717 62 Etienne Pallier
$ pip install django
718 62 Etienne Pallier
Collecting django
719 62 Etienne Pallier
  Downloading Django-1.9.4-py2.py3-none-any.whl (6.6MB)
720 62 Etienne Pallier
Installing collected packages: django
721 62 Etienne Pallier
Successfully installed django-1.9.4
722 62 Etienne Pallier
723 62 Etienne Pallier
$ pip install django-admin-tools
724 62 Etienne Pallier
Collecting django-admin-tools
725 62 Etienne Pallier
  Downloading django_admin_tools-0.7.2-py2.py3-none-any.whl (289kB)
726 62 Etienne Pallier
Installing collected packages: django-admin-tools
727 62 Etienne Pallier
Successfully installed django-admin-tools-0.7.2
728 62 Etienne Pallier
729 62 Etienne Pallier
$ pip install django-debug-toolbar
730 62 Etienne Pallier
Collecting django-debug-toolbar
731 62 Etienne Pallier
  Downloading django_debug_toolbar-1.4-py2.py3-none-any.whl (212kB)
732 62 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)
733 62 Etienne Pallier
Collecting sqlparse (from django-debug-toolbar)
734 62 Etienne Pallier
  Downloading sqlparse-0.1.19.tar.gz (58kB)
735 62 Etienne Pallier
Building wheels for collected packages: sqlparse
736 62 Etienne Pallier
  Running setup.py bdist_wheel for sqlparse ... done
737 62 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/7b/d4/72/6011bb100dd5fc213164e4bbee13d4e03261dd54ce6a5de6b8
738 62 Etienne Pallier
Successfully built sqlparse
739 62 Etienne Pallier
Installing collected packages: sqlparse, django-debug-toolbar
740 62 Etienne Pallier
Successfully installed django-debug-toolbar-1.4 sqlparse-0.1.19
741 62 Etienne Pallier
742 62 Etienne Pallier
$ pip install django-extensions
743 62 Etienne Pallier
Collecting django-extensions
744 62 Etienne Pallier
  Downloading django_extensions-1.6.1-py2.py3-none-any.whl (202kB)
745 62 Etienne Pallier
Collecting six>=1.2 (from django-extensions)
746 62 Etienne Pallier
  Downloading six-1.10.0-py2.py3-none-any.whl
747 62 Etienne Pallier
Installing collected packages: six, django-extensions
748 62 Etienne Pallier
Successfully installed django-extensions-1.6.1 six-1.10.0
749 62 Etienne Pallier
750 62 Etienne Pallier
$ pip install django-suit
751 62 Etienne Pallier
Collecting django-suit
752 62 Etienne Pallier
  Downloading django-suit-0.2.18.tar.gz (587kB)
753 62 Etienne Pallier
Building wheels for collected packages: django-suit
754 62 Etienne Pallier
  Running setup.py bdist_wheel for django-suit ... done
755 62 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/12/8b/9a/e02ab0ad9229881638aa040d47d77c8f562999533811927d41
756 62 Etienne Pallier
Successfully built django-suit
757 62 Etienne Pallier
Installing collected packages: django-suit
758 62 Etienne Pallier
Successfully installed django-suit-0.2.18
759 62 Etienne Pallier
760 62 Etienne Pallier
</pre>
761 62 Etienne Pallier
762 62 Etienne Pallier
  * *Install the django boostrap css package* :
763 62 Etienne Pallier
<pre>
764 62 Etienne Pallier
$ pip install django-bootstrap3
765 62 Etienne Pallier
</pre>
766 62 Etienne Pallier
(==> 'bootstrap3' is then to be added as an application in settings.py -> INSTALLED_APPS)
767 62 Etienne Pallier
768 62 Etienne Pallier
  * *Install the web application server gunicorn (will be used in production instead of the dev django web server)* :
769 62 Etienne Pallier
<pre>
770 62 Etienne Pallier
$ pip install gunicorn
771 62 Etienne Pallier
Collecting gunicorn
772 62 Etienne Pallier
  Downloading gunicorn-19.4.5-py2.py3-none-any.whl (112kB)
773 62 Etienne Pallier
Installing collected packages: gunicorn
774 62 Etienne Pallier
Successfully installed gunicorn-19.4.5
775 62 Etienne Pallier
</pre>
776 62 Etienne Pallier
777 62 Etienne Pallier
  * *Install the python mysql client* (not needed if you want to use sqlite):
778 62 Etienne Pallier
<pre>
779 62 Etienne Pallier
$ pip install mysqlclient
780 62 Etienne Pallier
...
781 62 Etienne Pallier
</pre>
782 62 Etienne Pallier
783 146 Etienne Pallier
   * => If issue under Mac OS X:
784 62 Etienne Pallier
<pre>
785 62 Etienne Pallier
$ pip install mysqlclient
786 62 Etienne Pallier
Collecting mysqlclient
787 62 Etienne Pallier
  Downloading mysqlclient-1.3.7.tar.gz (79kB)
788 62 Etienne Pallier
Building wheels for collected packages: mysqlclient
789 62 Etienne Pallier
  Running setup.py bdist_wheel for mysqlclient ... error
790 62 Etienne Pallier
791 62 Etienne Pallier
  ----------------------------------------
792 62 Etienne Pallier
  Failed building wheel for mysqlclient
793 62 Etienne Pallier
  Running setup.py clean for mysqlclient
794 62 Etienne Pallier
Failed to build mysqlclient
795 62 Etienne Pallier
Installing collected packages: mysqlclient
796 62 Etienne Pallier
  Running setup.py install for mysqlclient ... done
797 62 Etienne Pallier
Successfully installed mysqlclient-1.3.7
798 62 Etienne Pallier
799 62 Etienne Pallier
BOUH !!!
800 1 Etienne Pallier
801 152 Etienne Pallier
=> Need to upgrade wheel:
802 146 Etienne Pallier
803 62 Etienne Pallier
$ pip install --upgrade wheel
804 62 Etienne Pallier
Collecting wheel
805 62 Etienne Pallier
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
806 62 Etienne Pallier
Installing collected packages: wheel
807 62 Etienne Pallier
  Found existing installation: wheel 0.24.0
808 62 Etienne Pallier
    Uninstalling wheel-0.24.0:
809 62 Etienne Pallier
      Successfully uninstalled wheel-0.24.0
810 62 Etienne Pallier
Successfully installed wheel-0.29.0
811 62 Etienne Pallier
812 153 Etienne Pallier
YES !!!
813 1 Etienne Pallier
814 154 Etienne Pallier
Only if necessary, you can reinstall mysqlclient:
815 153 Etienne Pallier
$ pip uninstall mysqlclient
816 62 Etienne Pallier
$ pip install mysqlclient
817 62 Etienne Pallier
Collecting mysqlclient
818 62 Etienne Pallier
  Using cached mysqlclient-1.3.7.tar.gz
819 62 Etienne Pallier
Building wheels for collected packages: mysqlclient
820 62 Etienne Pallier
  Running setup.py bdist_wheel for mysqlclient ... done
821 62 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/9b/06/50/d11418c26cf8f2156b13d4363b5afde8e7e75ebb8540d0228d
822 62 Etienne Pallier
Successfully built mysqlclient
823 62 Etienne Pallier
Installing collected packages: mysqlclient
824 62 Etienne Pallier
Successfully installed mysqlclient-1.3.7
825 62 Etienne Pallier
826 1 Etienne Pallier
</pre>
827 62 Etienne Pallier
828 146 Etienne Pallier
   * => If issue under Windows
829 62 Etienne Pallier
<pre>
830 62 Etienne Pallier
Same message as the issue for Mac.
831 146 Etienne Pallier
832 152 Etienne Pallier
=> Need to upgrade wheel:
833 62 Etienne Pallier
834 62 Etienne Pallier
Go to http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient to download the newest mysqlclient wheel
835 62 Etienne Pallier
836 62 Etienne Pallier
$ pip install path\to\mysqlclient\wheel
837 62 Etienne Pallier
838 154 Etienne Pallier
(No need to redo "pip install mysqlclient")
839 62 Etienne Pallier
</pre>
840 163 Paul Carensac
841 163 Paul Carensac
  * *Install the julian day converter* :
842 163 Paul Carensac
<pre>
843 163 Paul Carensac
$ pip install jdcal
844 163 Paul Carensac
</pre>
845 182 Paul Carensac
846 188 Paul Carensac
  * *Install Celery and dependencies* :
847 182 Paul Carensac
<pre>
848 182 Paul Carensac
$ pip install celery
849 1 Etienne Pallier
$ pip install django-celery
850 188 Paul Carensac
$ pip install Twisted==16.0.0
851 188 Paul Carensac
</pre>
852 188 Paul Carensac
853 188 Paul Carensac
  * *Install django test without migrations (compulsory to use the prod DB for tests)* :
854 188 Paul Carensac
<pre>
855 188 Paul Carensac
$ pip install django-test-without-migrations==0.4
856 188 Paul Carensac
</pre>
857 188 Paul Carensac
858 188 Paul Carensac
  * *Install voevent parser* :
859 188 Paul Carensac
<pre>
860 188 Paul Carensac
$ pip install voevent-parse==0.9.5
861 188 Paul Carensac
</pre>
862 188 Paul Carensac
863 188 Paul Carensac
864 188 Paul Carensac
  * *Install other dependencies (useful ? TBC)* :
865 188 Paul Carensac
<pre>
866 188 Paul Carensac
$ pip install amqplib==1.0.2
867 188 Paul Carensac
$ pip install pluggy==0.3.1
868 188 Paul Carensac
$ pip install py==1.4.31
869 182 Paul Carensac
</pre>