Embalaje legado de Fortran en Python. ¿Está bien usar setuptools y numpy.distutils?

Estoy tratando de hacer una distribución de paquetes de Python para algunos códigos Fortran populares en mi campo. Quiero que use el enfoque más estándar con un archivo setup.py . La resolución relacionada fue útil para aprender a envolver las extensiones de 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 setuptools tanto como sea posible.

Sin embargo, me gustaría construir extensiones de Fortran de una manera que sea compatible con numpy. Así que 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.

  1. ¿Es generalmente una buena práctica mezclar setuptools y numpy.distribute ?
  2. ¿Importa el pedido que yo les importe? ¿Debo siempre importar setuptools primero?
  3. ¿Hay un tutorial actualizado oficial para empaquetar las extensiones a numpy ? Tal vez incluso una con algunas extensiones de Fortran de discusión?

Algunos enlaces

http://www.fortran90.org/src/best-practices.html#interfacing-with-python

Esto parece funcionar pero tengo preguntas.

  1. ¿Es generalmente una buena práctica mezclar setuptools y numpy.distribute?
  2. ¿Importa el pedido que yo les importe? ¿Debo siempre importar setuptools primero?
  3. ¿Hay un tutorial actualizado oficial para empaquetar las extensiones a numpy? Tal vez incluso una con algunas extensiones de Fortran de discusión?
  1. No debería necesitar usar numpy.distribute más.

  2. ^^ No es necesario

  3. Particularmente para envolver el código fortran con numpy, existe el popular f2py . Sin embargo, personalmente encuentro que las anotaciones de código necesarias son redundantes, porque el buen código fortran contiene toda la información necesaria.

( advirtiendo el enchufe del proyecto personal abajo )

Recientemente lanzado es el limpiador fmodpy , que genera automáticamente todo el código envoltorio necesario en una interfaz comprensible y limpia. Es compatible con pre-Fortran90, pero es más adecuado para Fortran90 y versiones posteriores. Se podría usar para generar una distribución limpia junto con la interfaz de código de Python (suponiendo que los usuarios tengan gfortran instalado).