Python >> Tutoriel Python >  >> Python

Configurer Python 3, Flask et Gunicorn sur Ubuntu 18.04 LTS

La dernière version du système d'exploitation de support à long terme (LTS) d'Ubuntu Linux est 18.04 et a été publiée en avril 2018. La mise à jour 18.04 porte le nom de code "Bionic Beaver" et inclut Python 3 par défaut. Cependant, vous devrez installer de nombreuses dépendances pour configurer cette version en tant qu'environnement de développement.

Dans ce didacticiel, nous allons configurer Python 3.6 avec des packages de système de développement pour démarrer un nouveau projet d'application Web Flask et l'exécuter avec Green Unicorn (Gunicorn).

Nos outils

Notre projet utilisera la version Ubuntu 18.04 avec quelques autres bibliothèques. Notez que si vous utilisez l'ancienne version 16.04 LTS, il existe également un guide qui vous guidera tout au long de la configuration de cette version en tant qu'environnement de développement.

Nous installerons les outils suivants au fur et à mesure que nous parcourrons les autres sections de ce didacticiel :

  • Ubuntu 18.04 LTS (Bionic Beaver)
  • Python version 3.6.5 (par défaut dans Ubuntu 18.04)
  • Flask Web Framework version1.0.2
  • Licorne verte (Gunicorn) version19.8.1

Si vous utilisez Mac OS X ou Windows, utilisez un logiciel de virtualisation tel que Parallels ou VirtualBox avec le fichier .iso d'Ubuntu. Soit la version amd64 ou ori386 pour 18.04 fonctionnera. J'utilise amd64 pour le développement et les tests dans ce tutoriel.

Lorsque vous démarrez sur le bureau Ubuntu, vous devriez voir un écran comme celui-ci.

Nous sommes prêts à configurer notre environnement de développement.

Packages système

Ouvrez une fenêtre de terminal pour procéder à la configuration.

Utilisez les deux commandes suivantes pour vérifier quelle version de Python 3 est installée

python3 --version
which python3

La version Python doit être 3.6.5 et l'emplacement /usr/bin/python3 .

Notre installation Ubuntu nécessite quelques packages système pour effectuer le développement plutôt que de simplement exécuter des scripts Python. Exécutez le apt-get suivant commande et saisissez votre sudo mot de passe pour autoriser un accès restreint au système.

sudo apt-get install python3-dev python3-pip python3-virtualenv

Nous devrions voir l'invite suivante demandant sudo accéder. Saisissez y pour laisser le gestionnaire de paquets système terminer l'installation.

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-4.15.0-20 linux-headers-4.15.0-20-generic
  linux-image-4.15.0-20-generic linux-modules-4.15.0-20-generic
  linux-modules-extra-4.15.0-20-generic
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  dh-python libexpat1-dev libpython3-dev libpython3.6-dev python3-setuptools
  python3-wheel python3.6-dev
Suggested packages:
  python-setuptools-doc
The following NEW packages will be installed:
  dh-python libexpat1-dev libpython3-dev libpython3.6-dev python3-dev
  python3-pip python3-setuptools python3-virtualenv python3-wheel
  python3.6-dev
0 upgraded, 10 newly installed, 0 to remove and 11 not upgraded.
Need to get 3,617 kB/3,661 kB of archives.
After this operation, 20.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

Le gestionnaire de paquets fera le sale boulot et devrait signaler quand l'installation se terminera avec succès.

(...clipped a bunch of installation lines for brevity...)
Unpacking python3-wheel (0.30.0-0.2) ...
Setting up python3-wheel (0.30.0-0.2) ...
Setting up python3-virtualenv (15.1.0+ds-1.1) ...
Setting up python3-pip (9.0.1-2.3~ubuntu1) ...
Setting up libexpat1-dev:amd64 (2.2.5-3) ...
Processing triggers for man-db (2.8.3-2) ...
Setting up python3-setuptools (39.0.1-2) ...
Setting up dh-python (3.20180325ubuntu2) ...
Setting up libpython3.6-dev:amd64 (3.6.5-3) ...
Setting up python3.6-dev (3.6.5-3) ...
Setting up libpython3-dev:amd64 (3.6.5-3) ...
Setting up python3-dev (3.6.5-3) ...

Les packages dont nous avons besoin sont maintenant installés. Nous pouvons continuer à installer nos dépendances spécifiques à Python.

Environnement virtuel

Nous avons installé virtualenvand pip pour gérer les dépendances de nos applications. Nous pouvons maintenant les utiliser pour télécharger et installer Flask et Gunicorn.

Créez un répertoire pour stocker vos virtualenvs. Créez ensuite un nouvel environnement virtuel dans ce répertoire.

# make sure pip and setuptools are the latest version
pip3 install --upgrade pip setuptools
# the tilde ("~") specifies the user's home directory, such as "/home/matt"
cd ~
mkdir venvs
# specify the system python3 installation
python3 -m venv venvs/flask1804

Activez l'environnement virtuel.

source ~/venvs/flask1804/bin/activate

Notre invite changera lorsque le virutalenv sera activé.

Notre virtualenv est maintenant activé avec Python 3. Nous pouvons installer toutes les dépendances dont nous avons besoin telles que Flask et Gunicorn.

Fiole et Gunicorn

Nous allons utiliser pip dans notre nouveau virtualenv mais c'est une bonne idée de le mettre à jour vers la dernière version. Nous devrions également installer le wheel package pour supprimer les avertissements d'installation lorsque pip essaie d'utiliser les roues Python, qui sont la norme la plus récente d'une longue lignée de modèles de packages de distribution Python.

pip install --upgrade pip
pip install wheel

Nous pouvons maintenant installer Flask et Green Unicorn via le pip commande.

pip install flask gunicorn

Recherchez une sortie similaire à la suivante pour vous assurer que les bibliothèques sont installées sans problème.

(flask1804) [email protected]:~$ pip install flask gunicorn
Collecting flask
  Using cached https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl
Collecting gunicorn
  Using cached https://files.pythonhosted.org/packages/55/cb/09fe80bddf30be86abfc06ccb1154f97d6c64bb87111de066a5fc9ccb937/gunicorn-19.8.1-py2.py3-none-any.whl
Collecting click>=5.1 (from flask)
  Using cached https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl
Collecting Werkzeug>=0.14 (from flask)
  Using cached https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl
Collecting itsdangerous>=0.24 (from flask)
  Using cached https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz
Collecting Jinja2>=2.10 (from flask)
  Using cached https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask)
  Using cached https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz
Building wheels for collected packages: itsdangerous, MarkupSafe
  Running setup.py bdist_wheel for itsdangerous ... done
  Stored in directory: /home/matt/.cache/pip/wheels/2c/4a/61/5599631c1554768c6290b08c02c72d7317910374ca602ff1e5
  Running setup.py bdist_wheel for MarkupSafe ... done
  Stored in directory: /home/matt/.cache/pip/wheels/33/56/20/ebe49a5c612fffe1c5a632146b16596f9e64676768661e4e46
Successfully built itsdangerous MarkupSafe
Installing collected packages: click, Werkzeug, itsdangerous, MarkupSafe, Jinja2, flask, gunicorn
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-1.0.2 gunicorn-19.8.1 itsdangerous-0.24

Créez un nouveau répertoire nommé flask1804 sous votre répertoire personnel (pas dans le venvs sous-répertoire) qui stockera notre projet de test Flask. Changez de répertoire dans le nouveau dossier.

mkdir ~/flask1804
cd ~/flask1804

Créez un nouveau fichier nommé __init__.py dans notre flaskproj répertoire afin que nous puissions tester pour nous assurer que Flask fonctionne correctement. J'utilise habituellement Vim mais Emacs et d'autres environnements de développement fonctionnent également très bien.

Dans __init__.py écrivez le code suivant.

from flask import Flask, Response


app = Flask(__name__)

@app.route("/")
def index():
    return Response("It works!"), 200

if __name__ == "__main__":
    app.run(debug=True)

Nous pourrions exécuter notre application avec le serveur de développement Flask en utilisant le python __init__.py commande. Au lieu de cela, exécutez l'application Flask avec Gunicorn. Allez dans le répertoire au-dessus du flask1804 dossier, dans notre cas nous pouvons saisir cd ~ puis utilisez le gunicorn commande :

gunicorn flask1804.app:app

Nous devrions voir :

[2018-06-15 15:54:31 -0400] [5174] [INFO] Starting gunicorn 19.8.1
[2018-06-15 15:54:31 -0400] [5174] [INFO] Listening at: http://127.0.0.1:8000 (5174)
[2018-06-15 15:54:31 -0400] [5174] [INFO] Using worker: sync
[2018-06-15 15:54:31 -0400] [5177] [INFO] Booting worker with pid: 5177

Super maintenant, nous pouvons afficher notre application Shell Flask dans le navigateur Web au localhost:8000 ou 127.0.0.1:8000 adresse.

Vous êtes maintenant prêt pour un vrai développement Flask !

Prêt à coder

Cela fournit une configuration rapide pour démarrer sur 18.04 LTSdévelopper des applications Flask avec le serveur Gunicorn WSGI.

Ensuite, vous devriez consulter les didacticiels suivants qui utilisent cette configuration Flask :

  • Répondre aux SMS avec Python et Flask
  • Comment ajouter une surveillance hébergée aux applications Web Flask)

Vous pouvez également déterminer ce qu'il faut coder ensuite dans votre projet Python en lisant la page de table des matières Full Stack Python.

Des questions? Contactez-moi via Twitter@fullstackpythonor @mattmakai. Je suis également sur GitHub avec le nom d'utilisateur mattmakai.

Quelque chose ne va pas avec ce message ? La source de cette page sur GitHuband soumet une pull request.