Упаковывание наследия 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
Ответы
Ответ 1
Это похоже на работу, но у меня есть вопросы.
- Как правило, рекомендуется смешивать setuptools и numpy.distribute?
- Является ли порядок, который я им импортирую, имеет значение? Должен ли я всегда импортировать setuptools в первую очередь?
- Есть ли официальное обновленное руководство по расширению упаковки для numpy? Возможно, даже один с некоторыми расширениями Фортрана?
-
Вам больше не нужно использовать numpy.distribute.
-
^^ Не требуется
-
В частности, для переноса кода fortran с numpy существует популярный f2py. Однако я лично считаю, что необходимые аннотации кода излишни, потому что хороший код fortran содержит всю необходимую информацию.
(предупреждение о подключении персонального проекта ниже)
Недавно выпущенный более чистый fmodpy, который автоматически генерирует весь необходимый код оболочки в понятном и чистом интерфейсе. Он поддерживает pre-Fortran90, но лучше всего подходит для Fortran90 и более поздних версий. Его можно использовать для создания чистого дистрибутива вместе с интерфейсом кода python (предполагая, что пользователи установили gfortran).