4 votes

Comment la poésie fonctionne-t-elle en ce qui concerne les dépendances binaires ? (surtout numpy)

Jusqu'à présent, j'utilisais conda comme environnement virtuel et gestionnaire de dépendances. Cependant, certaines choses ne fonctionnent pas comme prévu lorsque je transfère mon fichier environment.yml de ma machine de développement au serveur de production. Maintenant, je voudrais examiner des alternatives. Poetry semble intéressant, surtout parce que

poetry maintient également un fichier de verrouillage, et il présente un avantage par rapport à pipenv car il garde une trace des paquets qui sont des sous-dépendances. (https://realpython.com/effective-python-environment/#poetry)

ce qui pourrait améliorer considérablement la stabilité. Cependant, je travaille sur des projets scientifiques (matrices, science des données, apprentissage automatique), je ai donc besoin de l'ensemble de logiciels scipy en pratique (par exemple, numpy, pandas, scitkit-learn).

Python est devenu trop lent pour certains travaux de calcul pur, donc numpy et scipy sont nés. [...] Ils sont écrits en C et simplement enveloppés en tant que bibliothèque python.

Compiler de telles bibliothèques apporte un ensemble de défis puisqu'elles doivent (plus ou moins) être compilées sur votre machine pour obtenir des performances maximales et un bon lien avec des bibliothèques comme glibc.

Conda a été introduit comme une solution tout-en-un pour gérer les environnements python de la communauté scientifique.

[...] Au lieu d'utiliser un processus fragile de compilation de bibliothèques sur votre machine, les bibliothèques sont précompilées et simplement téléchargées lorsque vous les demandez. Malheureusement, la solution est accompagnée d'un inconvénient - conda n'utilise pas PyPI, l'index le plus populaire des paquets python.

(https://modelpredict.com/python-dependency-management-tools#fnref:conda-compiling-challenges)

À ma connaissance, cela ne rend même pas justice à Conda, car il fait beaucoup d'optimisation pour tirer le meilleur parti de mon CPU/GPU/architecture pour numpy. (https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions/#Myth-#6:-Now-that-pip-uses-wheels,-conda-is-no-longer-necessary)

https://numpy.org/install/ lui-même recommande d'utiliser conda, mais dit aussi qu'on peut installer via pip (et poetry utilise pypi)

Pour les utilisateurs qui connaissent, par préférence personnelle ou en lisant sur les principales différences entre conda et pip ci-dessous, ils préfèrent une solution basée sur pip/PyPI, nous recommandons :

[...] Utilisez Poetry comme l'outil le mieux maintenu qui fournit un solveur de dépendances et des capacités de gestion de l'environnement de manière similaire à conda.

J'aimerais obtenir la stabilité de la configuration de poetry et la rapidité de la configuration de conda.

Comment poetry gère-t-il les dépendances binaires ? Le fait-il également, comme conda, en tenant compte de mon matériel ?

Si poetry ne répond pas à cet égard, puis-je le combiner avec conda ?

3voto

finswimmer Points 409

numpy fournit plusieurs fichiers wheel pour différents systèmes d'exploitation, architectures de CPU et versions de python. Les packages wheel sont précompilés, donc le système cible n'a pas besoin de compiler le package.

poetry est capable de choisir le bon wheel pour vous, en fonction de votre système.

Cela dit, je recommanderais d'utiliser poetry, tant que vous avez juste besoin de packages python, qui sont également disponibles sur pypi. Dès que vous avez besoin d'autres outils non-python, restez sur conda. (Avis de non-responsabilité: Je suis l'un des mainteneurs de poetry).

Aussi lié: https://github.com/python-poetry/poetry/issues/1904

3voto

vincedgy Points 179

Sous MAC Os BigSur (11.1)

J'ai rencontré des problèmes toute la journée avec l'installation de numpy (avec pandas) pour Python 3.9.1.6 et poetry 1.1.4.

J'ai compris que poetry utilise pip qui n'utilise pas la version wheel de numpy lorsque pip <= 20.2.x. De plus, l'installation fraîche de Python 3.9.1.6 ne met pas à jour pip !

Voici comment j'ai réussi à installer ce dont j'avais besoin :

Vérifiez d'abord la version par défaut de Python liée à poetry (réinstallez-la si elle ne correspond pas)

poetry env info | grep -i python
Python:         3.9.1
Implementation: CPython
Python:   /usr/local/Cellar/python@3.9/3.9.1_6/Frameworks/Python.framework/Versions/3.9

Installez votre projet et exécutez poetry init sans les dépendances que vous recherchez (vous utiliserez poetry add juste après...)

Vous devriez obtenir quelque chose de similaire à ce pyproject.toml :

[tool.poetry]
name = "project1"
version = "0.1.0"
description = ""
authors = [""]

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

Lancez le shell poetry

  project1 poetry shell

Python 2.7 ne sera plus pris en charge dans la prochaine version de Poetry (1.2).
Vous devriez envisager de mettre à jour votre version de Python vers une version prise en charge.

Notez que vous pourrez toujours gérer les projets Python 2.7 en utilisant la commande env.
Consultez https://python-poetry.org/docs/managing-environments/ pour plus d'informations.

Spawning shell within /Users/vincent/Library/Caches/pypoetry/virtualenvs/project1-5XOg8Qie-py3.9
  project1 . /Users/vincent/Library/Caches/pypoetry/virtualenvs/project1-5XOg8Qie-py3.9/bin/activate
(project1-5XOg8Qie-py3.9)   project1

À ce stade mettez à jour pip, wheel et setuptools !

(project1-5XOg8Qie-py3.9)   project1 $ pip install --upgrade pip wheel setuptools
Looking in indexes: https://pypi.python.org/simple/
Collecting pip
  Using cached pip-20.3.3-py2.py3-none-any.whl (1.5 MB)
Collecting wheel
  Using cached wheel-0.36.2-py2.py3-none-any.whl (35 kB)
Collecting setuptools
  Using cached setuptools-51.1.2-py3-none-any.whl (784 kB)
Installing collected packages: pip, wheel, setuptools
  Attempting uninstall: pip
    Found existing installation: pip 20.2.4
    Uninstalling pip-20.2.4:
      Successfully uninstalled pip-20.2.4
  Attempting uninstall: wheel
    Found existing installation: wheel 0.35.1
    Uninstalling wheel-0.35.1:
      Successfully uninstalled wheel-0.35.1
  Attempting uninstall: setuptools
    Found existing installation: setuptools 50.3.2
    Uninstalling setuptools-50.3.2:
      Successfully uninstalled setuptools-50.3.2
Successfully installed pip-20.3.3 setuptools-51.1.2 wheel-0.36.2

Maintenant l'installation devrait bien se dérouler

(project1-5XOg8Qie-py3.9)   project1 poetry install
Installing dependencies from lock file

Package operations: 5 installs, 0 updates, 0 removals

  - Installing six (1.15.0)
  - Installing numpy (1.19.5)
  - Installing python-dateutil (2.8.1)
  - Installing pytz (2020.5)
  - Installing pandas (1.2.0)

Installing the current project: project1 (0.1.0)

Hourra !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X