在setup.py中自动构建共享fortran库并将其链接到f2py

kmb7vmvb  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(169)

我正在寻找最佳的方法来生成 setup.py 基于fortran例程构建我的包的文件。
包/模块结构

.
├── CHANGES.txt
├── LICENSE.txt
├── MANIFEST.in
├── README.md
├── PKG
│   ├── __init__.py
│   ├── lib
│   │   ├── __init__.py
│   │   ├── xx.f90
│   │   ├── yy.f90
│   │   ├── gg.py
│   ├── dirA
│   │   ├── __init__.py
│   │   ├── ee.py
│   │   ├── bb.py
├── setup.py

fortran文件的手工编译
为了生成python Package 器并编译fortran文件,我可以使用以下工作流(在文件夹库中)来完成: gfortran -fPIC -Wall -fcheck=all --shared xx.f90 -o xx.o [1]
f2py -c -m yy yy.f90 xx.o 前一行确保共享库之间的链接 xx.o 还有图书馆'yy.f90。
注意 f2py -c -m xx xx.f90 由于使用了一些不可用于f2py的语法(在子例程中使用可分配参数…),因此无法工作。
现在的 setup.py (不工作)
我使用 Extension 模块 numpy.distutils :

import os
from numpy.distutils.core import setup, Extension

# 

pkgs['PKG'] = 'PKG'
pkgs['PKG.lib'] = 'PKG/lib'
pkgs['PKG.dirA'] = 'PKG/dirA'

# 

exts = list()
exts.append(
    Extension(name='PKG.lib.yy',
              sources=['PKG/lib/yy.f90','PKG/lib/xx.o'],
              extra_compile_args=['-g','--backtrace'],
              extra_link_args=[],
              f2py_options=['--debug-capi']))
    ###
    ### 
    setup(name = 'PKG',
          ext_modules = exts,
          packages = list(pkgs.keys()),
          package_dir = pkgs,
          include_package_data=True,
          zip_safe=False
          )

问题
有没有办法将共享图书馆的建设整合到 setup.py ? 一种解决方案是手动运行第[1]行,但如果可能的话,我希望避免使用自己的语法来使用相同的gfortran编译器和 f2py .

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题