Подтвердить что ты не робот

Упаковывание наследия Fortran в Python. Можно ли использовать setuptools и numpy.distutils?

Я пытаюсь сделать дистрибутив пакета python для некоторых популярных кодов Fortran в моей области. Я хочу, чтобы он использовал самый стандартный подход с файлом setup.py. Связанный qustion был полезен для обучения для того, чтобы обернуть расширения Fortran.

При использовании этого подхода я заметил некоторое запутанное поведение при смешивании setuptools и numpy.distutils. Неправильно ли это смешивать эти два? По состоянию на 2015 год предпочтительнее использовать setuptools как можно больше.

Тем не менее, я хотел бы построить расширения Fortran таким образом, который совместим с numpy. Итак, я хотел бы импортировать из numpy.distutils, чтобы получить Extension и setup.

Я использую следующий базовый подход:

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})

Это похоже на работу, но у меня есть вопросы.

  • Как правило, рекомендуется смешивать setuptools и numpy.distribute?
  • Является ли порядок, который я им импортирую, имеет значение? Должен ли я всегда импортировать setuptools первым?
  • Есть ли официальный обновленный учебник по расширению упаковки для numpy? Возможно, даже один с некоторыми расширениями Фортрана?

Некоторые ссылки

https://www.youtube.com/watch?v=R4yB-8tB0J0

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

4b9b3361

Ответ 1

Это похоже на работу, но у меня есть вопросы.

  • Как правило, рекомендуется смешивать setuptools и numpy.distribute?
  • Является ли порядок, который я им импортирую, имеет значение? Должен ли я всегда импортировать setuptools в первую очередь?
  • Есть ли официальное обновленное руководство по расширению упаковки для numpy? Возможно, даже один с некоторыми расширениями Фортрана?
  • Вам больше не нужно использовать numpy.distribute.

  • ^^ Не требуется

  • В частности, для переноса кода fortran с numpy существует популярный f2py. Однако я лично считаю, что необходимые аннотации кода излишни, потому что хороший код fortran содержит всю необходимую информацию.

(предупреждение о подключении персонального проекта ниже)

Недавно выпущенный более чистый fmodpy, который автоматически генерирует весь необходимый код оболочки в понятном и чистом интерфейсе. Он поддерживает pre-Fortran90, но лучше всего подходит для Fortran90 и более поздних версий. Его можно использовать для создания чистого дистрибутива вместе с интерфейсом кода python (предполагая, что пользователи установили gfortran).