La forma más “Pythonic” de tener un paquete que instale dependencias en función de la presencia o fabricante de la GPU es la siguiente:
Actualmente estoy desarrollando una biblioteca de Aprendizaje Automático que permite a los usuarios escribir código independiente de CPU y GPU para lograr ciertas tareas. Para ejecutar el código habilitado para GPU, mi paquete tiene dependencias específicas que solo son compatibles con GPU de NVIDIA habilitados para CUDA. Por lo tanto, me gustaría que mi paquete solo instale esas dependencias cuando un usuario instale mi paquete en un dispositivo con GPU habilitado para CUDA. Investigué cómo hacer esto y al principio parecía que la respuesta estaba en PEP 508. Sin embargo, los “marcadores de entorno” descritos en este PEP no incluyen la presencia de una GPU, y mucho menos el fabricante y/o controladores de esa GPU.
Por lo tanto, estoy buscando la solución más “Pythonic” para instalar ciertas dependencias en función de la presencia de una GPU de NVIDIA habilitada para CUDA (si es mucho más fácil simplemente comprobar la presencia de una GPU de NVIDIA sin verificar el estado de CUDA, puedo hacerlo como solución por el momento, pero definitivamente preferiría verificar el estado habilitado para CUDA).
Entiendo que setup.py puede ejecutar código Python arbitrario, por lo que técnicamente puedo resolver este problema con código dentro de ese archivo que lo haga por mí. Sin embargo, tengo entendido que la comunidad de Python se está alejando de la dependencia de setup.py debido a los riesgos inherentes asociados con la ejecución de código arbitrario durante la instalación del paquete. Por lo tanto, me gustaría cumplir con las preferencias de la comunidad y que mi solución utilice pyproject.toml si es posible, aunque también estaría dispuesto a usar setup.cfg si se considera más apropiado (para ser honesto, no siento que comprenda completamente la distinción entre estos dos archivos y cuál es más apropiado para qué propósito, aunque según el video de mCoding que vi para configurar mis pruebas parece que setup.cfg se utiliza más para metadatos del paquete).
Aunque lo que estoy buscando hacer no se detalla expresamente en PEP 508, parece que va en el mismo espíritu, por lo que me sorprendería si no hubiera una forma canónica de hacerlo.
davy.ai
Como experto en TI especializado en python, pip, setuptools y pyproject.toml, sugeriría utilizar el archivo
pyproject.toml
para especificar la dependencia de la GPU NVIDIA habilitada para CUDA. Esto se puede lograr utilizando la secciónbuild-system.requires
en el archivopyproject.toml
. Puedes especificar las dependencias necesarias para la instalación en diferentes plataformas, incluyendocuda
para GPUs NVIDIA habilitadas para CUDA.Alternativamente, puedes utilizar
setup.cfg
para especificar las dependencias condicionales. Puedes definir diferentes opciones, comowith_cuda
, y utilizarsetup_requires
para instalar paquetes adicionales necesarios para que se cumpla la condición.En cualquier caso, debes evitar el uso de ejecución de código arbitrario durante la configuración del paquete moviéndote lejos de
setup.py
. En su lugar, especifica las dependencias y los requisitos del entorno en uno de los archivos recomendados, comopyproject.toml
osetup.cfg
.