Lors de l’apprentissage d’un langage de programmation, l’accent est essentiellement mis sur la compréhension de la syntaxe, du style de code et des concepts sous-jacents. Avec le temps, vous devenez suffisamment à l’aise avec le langage et vous commencez à écrire des programmes résolvant de nouveaux problèmes passionnants.
Cependant, lorsque vous devez vous diriger vers cette étape, il y a un aspect que l’on a peut-être sous-estimé, à savoir comment construire le bon environnement. Un environnement qui applique de bonnes pratiques d’ingénierie logicielle, améliore la productivité et facilite la collaboration. Chez Adaltas, nous gérons plusieurs projets open source et nous accueillons beaucoup de contributions. Ils ciblent principalement la plateforme Node.js. Sur la base de cette expérience, nous avons déjà établi pratiques courantes pour la gestion de projets à grande échelle écrits en Node.js.
Un autre langage que nous utilisons également beaucoup dans notre travail quotidien de consultant en données est Python. L’empaquetage et l’outillage avec Python sont souvent décrits comme fastidieux et difficiles. À cet égard, plusieurs projets open-source ont vu le jour ces dernières années et visent à faciliter la gestion des packages Python tout au long de vos projets de travail. Nous allons voir ici comment en utiliser deux : Pyenvpour gérer et installer différentes versions de Python, et Poésie, pour gérer vos packages et environnements virtuels. Combinés ou utilisés individuellement, ils vous aident à établir un environnement productif.
Cet article est le premier d’une série de trois dans lesquels nous partageons nos meilleures pratiques.
Conditions préalables
pyenv
installation
À installer pyenv
vous avez besoin de certaines dépendances spécifiques au système d’exploitation. Ceux-ci sont nécessaires comme pyenv
installe Python en construisant à partir de la source. Pour Ubuntu/Debian assurez-vous d’avoir installé les packages suivants :
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
Pour connaître les dépendances requises sur votre système d’exploitation allez lire ceci Documentation. Une fois les dépendances installées, vous pouvez maintenant installer pyenv
. Pour cela, je recommande d’utiliser installateur pyenv qui automatise le processus.
curl https://pyenv.run | bash
À partir de là, vous pouvez installer sur votre système toutes les versions de Python que vous souhaitez. Vous pouvez utiliser la commande suivante pour toutes les versions et variantes de Python disponibles :
Dans notre cas, nous allons installer le CPython classique dans les versions 3.7.10
, 3.8.7
, 3.9.2
:
pyenv install 3.7.10
Downloading Python-3.7.10.tar.xz...
-> https://www.python.org/ftp/python/3.7.10/Python-3.7.10.tar.xz
Installing Python-3.7.10...
Installed Python-3.7.10 to /home/fbraza/.pyenv/versions/3.7.10
Une fois les versions installées, vous pouvez les voir en exécutant :
pyenv versions
* system
3.7.10
3.8.7
3.9.2
Tu peux voir ça pyenv
identifié les versions de Python récemment installées ainsi que celle installée par défaut sur votre système. La *
avant de system
signifie que la version globale utilisée maintenant est la version du système. pyenv
permet de gérer les versions de Python à différents niveaux : globalement et localement. Disons que nous allons définir la version 3.7.10
comme notre version globale.
Listons à nouveau notre version :
pyenv versions
system
* 3.7.10 (set by /home/<username>/.pyenv/version)
3.8.7
3.9.2
Tu peux voir ça pyenv
ensembles 3.7.10
comme notre version globale de Python. Cela ne modifiera pas les opérations nécessitant l’utilisation de la version du système. Le chemin que vous pouvez lire entre parenthèses correspond au chemin qui pointe vers la version Python requise. Comment cela marche-t-il? Brièvement, pyenv
capture les commandes Python à l’aide d’exécutables injectés dans votre PATH
. Ensuite, il détermine la version de Python que vous devez utiliser et transmet les commandes à l’installation correcte de Python. N’hésitez pas à lire l’intégralité Documentation mieux appréhender les fonctionnalités et les possibilités offertes par pyenv
.
Ne soyez pas confus par la sémantique ici. Changer la version globale n’affectera pas la version de votre système. La version du système correspond à la version utilisée par votre système d’exploitation pour accomplir des tâches spécifiques ou exécuter des processus d’arrière-plan qui dépendent de cette version spécifique de Python. Ne changez pas la version du système à une autre ou vous pourriez rencontrer plusieurs problèmes avec votre système d’exploitation ! Cette version est généralement mise à jour avec votre système d’exploitation. La version globale est juste la version qui
pyenv
utilisera pour exécuter vos commandes/programmes Python globalement.
poetry
installation
Poetry vous permet de gérer efficacement les dépendances et les packages en Python. Il a un rôle similaire à setup.py
ou pipenv, mais offre plus de flexibilité et de fonctionnalités. Vous pouvez déclarer les bibliothèques dont dépend votre projet dans un pyproject.toml
dossier. poetry
les installera ou les mettra à jour à la demande. De plus, cet outil vous permet d’encapsuler votre projet de travail dans des environnements isolés. Enfin, vous pouvez utiliser poetry
pour publier directement votre package sur pypi.
Comme dernier pré-requis nous allons installer poetry
en exécutant la commande suivante :
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
Création de projet
Nous allons voir comment créer un projet et l’isoler dans un environnement Python en utilisant pyenv
et poetry
.
Définir la version de Python avec Pyenv
Commençons par créer un répertoire nommé my_awesome_project
et déplacez-vous à l’intérieur :
mkdir my_awesome_project && cd $_
Une fois à l’intérieur, définissez la version locale de Python que nous allons utiliser (nous allons utiliser Python 3.8.7). Cela incitera poetry
utiliser la version locale de Python définie par pyenv
:
Cela crée un .python-version
fichier à l’intérieur de notre projet. Ce fichier sera lu par pyenv
et l’invite à définir la version Python locale définie. Par conséquent, chaque répertoire ou fichier créé à ce stade dépendra de la version locale de Python et non de la version globale.
Créez votre projet avec poetry
Poetry propose une CLI robuste vous permettant de créer, configurer et mettre à jour votre projet Python et ses dépendances. Pour créer votre projet Python, utilisez la commande suivante :
poetry new <project_name>
Cette commande génère un échafaudage de projet par défaut. Le contenu de notre nouveau projet est le suivant :
.
├──
│ └── __init__.py
├── pyproject.toml
├── README.rst
└── tests
├── __init__.py
└── test_summarize_dataframe.py
Remarquez le pyproject.toml
. C’est là que nous définissons tout, depuis les métadonnées, les dépendances, les scripts, etc. de notre projet. Si vous connaissez Node.js, considérez le pyproject.toml
comme équivalent du Node.js package.json
.
[tool.poetry]
name = "your_project_name"
version = "0.1.0"
description = ""
authors = ["<username> <email address>"]
[tool.poetry.dependencies]
python = "^3.8"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Nous pouvons voir plusieurs entrées dans notre défautpyproject.toml
dossier.
[tool.poetry]
: Cette section contient des métadonnées sur notre package. Vous pouvez y mettre le nom du package, une courte description, les détails de l’auteur, la version de votre projet, etc. Tous les détails ici sont facultatifs mais seront nécessaires si vous avez décidé de publier le package sur pypi.[tool.poetry.dependencies]
: Cette section contient toutes les dépendances requises pour notre package. Vous pouvez spécifier des numéros de version spécifiques pour ces packages (packageX = "1.0.0"
) ou utilisez des symboles. La version de Python que nous voulons que le projet utilise est également définie ici. Dans notre caspython = "^3.8"
précise le le minimum version requise pour exécuter notre application. Voici Python 3.8 et cela a été basé sur la version de notre version locale définie avecpyenv
.[tool.poetry.dev-dependencies]
: Cette section contient toutes les dépendances de développeur qui sont des packages nécessaires pour travailler et itérer sur ce projet. Néanmoins, ces dépendances ne sont pas nécessaires pour exécuter l’application et ne seront pas téléchargées lors de la construction du package.[build-system]
: Ne touchez pas à cette section à moins d’avoir mis à jour la version depoetry
.
vous pouvez voir la liste complète des entrées disponibles pour le
pyproject.toml
dossier ici
Installer et activer l’environnement virtuel
Ici, vous avez deux approches : si vous connaissez à l’avance toutes les dépendances dont vous avez besoin et si vous pouvez directement modifier le .toml
fichier en conséquence ou vous décidez d’ajouter plus tard si nécessaire. Dans notre exemple, nous allons ajouter au fur et à mesure de l’écriture du code nos dépendances. Par conséquent, il suffit d’initialiser le projet et de créer l’environnement virtuel. Pour cela lancez la commande :
poetry install
Creating virtualenv summarize-dataframe-SO-g_7pj-py3.8 in ~/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (6.4s)
Writing lock file
Package operations: 8 installs, 0 updates, 0 removals
• Installing pyparsing (2.4.7)
• Installing attrs (20.3.0)
• Installing more-itertools (8.7.0)
• Installing packaging (20.9)
• Installing pluggy (0.13.1)
• Installing py (1.10.0)
• Installing wcwidth (0.2.5)
• Installing pytest (5.4.3)
Installing the current project: summarize_dataframe (0.1.0)
Premièrement, l’environnement virtuel est créé et stocké en dehors du projet. Un peu similaire à ce que nous avons lors de l’utilisation conda
. En effet, au lieu de créer un dossier contenant vos bibliothèques de dépendances (comme virtualenv
Est-ce que), poetry
crée un environnement sur un chemin système global (.cache/
par défaut). Cette séparation des préoccupations permet d’éloigner votre projet du code source des dépendances.
Vous pouvez créer votre environnement virtuel dans votre projet ou dans n’importe quel autre répertoire. Pour cela, vous devez modifier la configuration de la poésie. Suivez ceci Documentation pour plus de détails.
Deuxièmement, poetry
va lire le pyproject.toml
et installez toutes les dépendances spécifiées dans ce fichier. S’il n’est pas défini, la poésie téléchargera la dernière version des packages. A la fin de l’opération, un poetry.lock
fichier est créé. Il contient tous les packages et leurs versions exactes. Gardez à l’esprit que si un poetry.lock
fichier est déjà présent, les numéros de version qui y sont définis prévalent sur ce qui est défini dans le pyproject.toml
. Enfin, vous devez engager le poetry.lock
fichier dans votre référentiel de projet afin que tous les collaborateurs travaillant sur le projet utilisent les mêmes versions des dépendances.
Activons maintenant l’environnement que nous venons de créer avec la commande suivante :
peotry shell
Spawning shell within ~/.cache/pypoetry/virtualenvs/summarize-dataframe-SO-g_7pj-py3.8
. ~/.cache/pypoetry/virtualenvs/summarize-dataframe-SO-g_7pj-py3.8/bin/activate
La commande crée un processus enfant qui hérite du Shell parent mais ne modifie pas son environnement. Il encapsule et limite toutes les modifications que vous apporterez à votre environnement de projet.
Créez notre git
dépôt
Pour notre dernière étape ici, nous allons créer un référentiel git, ajouter README.md
et .gitignore
fichiers et poussez tout vers notre référentiel distant.
git init
git remote add origin https://github.com/fbraza/summarize_dataframe.git
echo ".*\n!.gitignore" > .gitignore
echo "# Summarize dataframe" > README.md
git add .
git commit -m "build: first commit. Environment built"
git push -u origin master
Conclusion
Ici, nous avons vu comment installer et gérer différentes versions de Python sur notre machine en utilisant pyenv
. Nous avons montré comment tirer parti pyenv local
pour définir une version Python spécifique dans votre projet, puis créer un environnement virtuel à l’aide poetry
. L’utilisation de poetry
facilite vraiment le processus de création en proposant un échafaudage simple et largement projeté. En outre, il inclut les exigences minimales du système de construction telles que définies par PEP 518.
Dans notre prochain article, nous allons plonger davantage dans notre projet. Nous allons écrire du code avec leurs tests unitaires respectifs et voir comment nous pouvons utiliser poetry
pour ajouter les dépendances attendues et exécuter les tests. Enfin, nous allons aller un peu plus loin et installer toutes les dépendances nécessaires avec poetry
pour nous aider à appliquer les bonnes pratiques avec nos git
commits lors de l’utilisation d’un projet Python.
Aide-mémoire
pyenv
- Obtenez toutes les versions disponibles et installables de Python
- Définir la version globale de Python
pyenv global <version_id>
- Définir une version locale de Python
More Stories
Test des écouteurs Jabra Elite 5 ANC : superbe design, bon son
La filiale londonienne du CWU dit aux ingénieurs de BT de rejeter l’offre de rémunération
Revue du générateur solaire Jackery Explorer 1500 : la protection contre les pannes de courant à son meilleur