Project Installation

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