¿Tiene sentido usar Conda + Poetry para un proyecto de Machine Learning? Permítame compartir mi comprensión (novata) y corríjame o ilumíneme:
Según tengo entendido, Conda y Poetry tienen diferentes propósitos pero son en gran medida redundantes:
Mi idea es usar ambos y compartimentar sus roles: dejar que Conda sea el administrador del entorno y Poetry el administrador de paquetes. Mi razonamiento es que (parece que) Conda es mejor para administrar entornos y puede usarse para compilar e instalar paquetes que no sean de Python, especialmente controladores CUDA (para capacidad de GPU), mientras que Poetry es más poderoso que Conda como administrador de paquetes de Python.
Me las arreglé para hacer que esto funcione con bastante facilidad usando Poetry dentro de un entorno Conda. El truco es no usar Poetry para administrar el entorno de Python: no estoy usando comandos como poetry shell o poetry run , solo poetry init , poetry install , etc. (después de activar el entorno Conda).
Para una divulgación completa, mi archivo environment.yml (para Conda) se ve así:
name: N channels: - defaults - conda-forge dependencies: - python=3.9 - cudatoolkit - cudnny mi archivo poet.toml se ve así:
[tool.poetry] name = "N" authors = ["B"] [tool.poetry.dependencies] python = "3.9" torch = "^1.10.1" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"Para ser honesto, una de las razones por las que procedí de esta manera es que estaba luchando por instalar CUDA (para compatibilidad con GPU) sin Conda.
¿Le parece razonable el diseño de este proyecto?
Como escribí en el comentario, he estado usando una configuración de Conda + Poetry muy similar en un proyecto de ciencia de datos durante el último año, por razones similares a las suyas, y ha funcionado bien. La gran mayoría de mis dependencias se especifican en pyproject.toml , pero cuando hay algo que no está disponible en PyPI, lo agrego a environment.yml .
Algunos consejos adicionales:
environment.yml , de modo que pueda instalar Poetry cuando ejecute conda env create , junto con Python y otras dependencias que no sean PyPI.conda-lock , que le brinda archivos de bloqueo para las dependencias de Conda, al igual que tiene poetry.lock para las dependencias de Poetry.