Les Crash-Devs d'un Passionné

Gérer poetry sur un interpréteur python spécifique

/Catégorie/python

Temps de lecture : 2 minutes

Lorsque l'on utilise poetry (un gestionnaire de package et de dépendances python) il va automatiquement prendre l'interpréteur de l'hôte en choisissant la bonne version https://python-poetry.org/docs/basic-usage#setting-a-python-version

Dans mon cas j'utilise

pyenv
qui est un outil permettant d'installer plusieurs versions de python sur un même hôte. Par exemple si on souhaite installer la version 3.8 on lance
pyenv install 3.8

Selon la documentation de

poetry
on pourrait croire que les commandes suivantes installent les dépendances avec python 3.8

clipboard
Copier le code
1
2
3
cd /path/my/projet
pyenv local 3.8
pyenv exec poetry init -n # n option for non interactive

Sauf que poetry installe les dépendances avec la version de python par défaut sur votre hôte (3.10).

clipboard
Copier le code
1
2
3
4
5
$ cat pyproject.toml 
...
[tool.poetry.dependencies]
python = "^3.10" 
...

Vous pouvez vérifier cette divergeance avec ces commandes

clipboard
Copier le code
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ pyenv versions
system
* 3.8.19 (set by /home/david/projects/demo/.python-version)
  3.11.9

$ pyenv exec poetry env info
Virtualenv
Python:         3.10.12
Implementation: CPython
Path:           NA
Executable:     NA

Base
Platform:   linux
OS:         posix
Python:     3.10.12
Path:       /usr
Executable: /usr/bin/python3.10

Selon la documentation de poetry il est demandé de mettre à jour une configuration :

clipboard
Copier le code
1
2
3
4
$ poetry config virtualenvs.prefer-active-python true
$ poetry config --list
...
virtualenvs.prefer-active-python = true

Et vous pouvez maintenant vérifier que tout est bon en relançant la commande

poetry init -n
(pensez à supprimer le fichier
pyproject.toml
avant)

clipboard
Copier le code
1
2
3
4
5
6
$ poetry init -n
$ cat pyproject.toml 
...
[tool.poetry.dependencies]
python = "^3.8" 
...

On constate que l'on est bien sur la bonne version de l'interpréteur python car auparavant nous avions lancé la commande

pyenv local 3.8