Embalaje heredado Fortran en Python. ¿Está bien usar setuptools y numpy.distutils?
f2py (1)
Esto parece funcionar pero tengo preguntas.
- ¿Es generalmente una buena práctica mezclar setuptools y numpy.distribute?
- ¿Importa el pedido que les importo? ¿Debo importar siempre las herramientas de configuración primero?
- ¿Existe un tutorial oficial actualizado para empaquetar extensiones a numpy? ¿Quizás incluso uno con alguna discusión sobre las extensiones de Fortran?
-
Ya no debería necesitar usar numpy.distribute.
-
^^ No es necesario
-
Particularmente para envolver código fortran con numpy, existe el popular f2py . Sin embargo, personalmente considero que las anotaciones de código necesarias son redundantes, porque un buen código fortran contiene toda la información necesaria.
( advertencia proyecto personal enchufe a continuación )
Recientemente se lanzó el limpiador fmodpy , que genera automáticamente todo el código contenedor necesario en una interfaz comprensible y limpia. Es compatible con versiones anteriores a Fortran90, pero es más adecuado para Fortran90 y posteriores. Podría usarse para generar una distribución limpia junto con la interfaz de código de Python (suponiendo que los usuarios tengan instalado gfortran).
Estoy tratando de hacer una distribución de paquete de Python para algunos códigos populares de Fortran en mi campo.
Quiero que use el enfoque más estándar con un archivo
setup.py
.
La pregunta relacionada fue útil para aprender
a envolver extensiones Fortran
.
Al usar este enfoque, noté un comportamiento confuso al mezclar
setuptools
y
numpy.distutils
.
¿Es una mala práctica mezclar los dos?
A partir de 2015, parece preferible utilizar las
setuptools
tanto como sea posible.
Sin embargo, me gustaría construir extensiones de
Fortran
de una manera que sea compatible con
numpy.
Por lo tanto, me gustaría importar desde
numpy.distutils
para obtener
Extension
y
setup
.
Estoy usando el siguiente enfoque básico:
from setuptools.command.develop import develop
from numpy.distutils.core import Extension, setup
ext_modules=[Extension("my_package.fortran_mod", sources=[''src/fortran_mod.f''])]
class MyDevelop(develop):
def run(self):
my_script()
develop.run(self)
setup(
...
ext_modules=ext_modules,
cmdclass={''develop'':MyDevelop})
Esto parece funcionar pero tengo preguntas.
-
¿Es generalmente una buena práctica mezclar
setuptools
ynumpy.distribute
? -
¿Importa el pedido que les importo?
¿Debo importar siempre las
setuptools
primero? -
¿Existe un tutorial oficial actualizado para empaquetar extensiones a
numpy
? ¿Quizás incluso uno con alguna discusión sobre las extensiones de Fortran?
Algunos enlaces
https://www.youtube.com/watch?v=R4yB-8tB0J0
http://www.fortran90.org/src/best-practices.html#interfacing-with-python