首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有关于如何用f2py使用scikit-build的工作示例吗?

有关于如何用f2py使用scikit-build的工作示例吗?
EN

Stack Overflow用户
提问于 2021-01-15 23:48:12
回答 1查看 371关注 0票数 1

scikit-build发行版提供了FindF2PY和UseF2PY的使用示例,但它们是不完整的,只提供了部分CMakeLists.txt文件,而没有提供其他必需的文件。基于这些文档,我还没能做出构建的东西。

按照scikit-build文档中的示例,我创建了以下文件:

CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.10.2)

project(skbuild_test)

enable_language(Fortran)

find_package(F2PY REQUIRED)

add_f2py_target(f2py_test f2py_test.f90)
add_library(f2py_test MODULE f2py_test.f90)
install(TARGETS f2py_test LIBRARY DESTINATION f2py_test)

setup.py:

代码语言:javascript
复制
import setuptools
from skbuild import setup

requires=['numpy']

setup(
    name="skbuild-test",
    version='0.0.1',
    description='Performs line integrals through SAMI3 grids',
    author='John Haiducek',
    requires=requires,
    packages=['f2py_test']
)

f2py_test.f90:

代码语言:javascript
复制
module mod_f2py_test
  implicit none
contains
  subroutine f2py_test(a,b,c)
    real(kind=8), intent(in)::a,b
    real(kind=8), intent(out)::c
  end subroutine f2py_test
end module mod_f2py_test

此外,我还创建了一个目录f2py_test,其中包含一个空的init.py。

来自python setup.py develop的输出显示,scikit-build调用CMake并编译我的Fortran代码。但是,在编译f2py包装程序代码时,它无法找到Python.h:

代码语言:javascript
复制
[2/7] Building C object CMakeFiles/_f2...kages/numpy/f2py/src/fortranobject.c.o
FAILED: CMakeFiles/_f2py_runtime_library.dir/venv/lib/python3.8/site-packages/numpy/f2py/src/fortranobject.c.o 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc   -O3 -DNDEBUG -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -mmacosx-version-min=10.14 -MD -MT CMakeFiles/_f2py_runtime_library.dir/venv/lib/python3.8/site-packages/numpy/f2py/src/fortranobject.c.o -MF CMakeFiles/_f2py_runtime_library.dir/venv/lib/python3.8/site-packages/numpy/f2py/src/fortranobject.c.o.d -o CMakeFiles/_f2py_runtime_library.dir/venv/lib/python3.8/site-packages/numpy/f2py/src/fortranobject.c.o   -c ../../../venv/lib/python3.8/site-packages/numpy/f2py/src/fortranobject.c
In file included from ../../../venv/lib/python3.8/site-packages/numpy/f2py/src/fortranobject.c:2:
../../../venv/lib/python3.8/site-packages/numpy/f2py/src/fortranobject.h:7:10: fatal error: 'Python.h' file not found
#include "Python.h"
         ^~~~~~~~~~
1 error generated.
EN

回答 1

Stack Overflow用户

发布于 2021-03-15 20:53:53

首先要注意的是,也许有更好的方法来做到这一点,因为我刚刚想出了如何通过在您的帖子上绊脚石和查看文档来使scikit构建工作。第二个警告,我也在学习cmake。所以,也许有更好的方法。

在这里,有几件事你需要让你的例子起作用。最大的一个是add_f2py_target()的第二个参数不是源文件。它要么是预先生成的*.pyf的名称,要么让f2py生成一个没有*.pyf扩展的参数。另一种是为各种组件添加包含目录。

我让您的示例使用以下CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.10.2)
project(skbuild_test)
enable_language(Fortran)
find_package(F2PY REQUIRED)
find_package(PythonLibs REQUIRED)
find_package(Python3 REQUIRED COMPONENTS NumPy)

#the following command either generates or points to an existing .pyf
#if provided an argument with .pyf extension, otherwise f2py generates one (not source code).
add_f2py_target(f2py_test f2py_test)
add_library(f2py_test MODULE f2py_test.f90)
include_directories(${PYTHON_INCLUDE_DIRS})
include_directories(${_Python3_NumPy_INCLUDE_DIR})
target_link_libraries(f2py_test ${PYTHON_LIBRARIES})
install(TARGETS f2py_test LIBRARY DESTINATION f2py_test)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65745001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档