Python f2py包装编译错误:设置数组的形状

Python f2py包装编译错误:设置数组的形状,python,fortran,f2py,Python,Fortran,F2py,我在通过f2py编译时遇到问题。我有一个f90模块,里面有几个子程序。到目前为止,它编译得很好,可以在python脚本中使用。但是,现在当我尝试编译和构建它时,它会抱怨以下错误: build/src.macosx-10.5-x86_64-2.7/PyCosmology/sims/fort/read_sim-f2pywrappers2.f90:355.17: allocate(d()) 1 Error: Shape specification for alloca

我在通过f2py编译时遇到问题。我有一个f90模块,里面有几个子程序。到目前为止,它编译得很好,可以在python脚本中使用。但是,现在当我尝试编译和构建它时,它会抱怨以下错误:

build/src.macosx-10.5-x86_64-2.7/PyCosmology/sims/fort/read_sim-f2pywrappers2.f90:355.17:

   allocate(d())
             1
Error: Shape specification for allocatable scalar at (1)
它还有另外两个错误,但这些错误只是由于
d()
没有在此处正确分配而导致的。您可以看到它正在编译的文件是f2py包装器。更奇怪的是,当我实际查看它指向的包装文件时,第355行实际上是:

       allocate(d(s(1),s(2)))
所以我不知道为什么编译器告诉我allocate语句中没有形状说明符。正因为如此,我不知道如何修复它

请注意,自上次正确编译模块以来,我对它做了一些更改,但我根本没有触及发生此错误的数组,也没有触及它所在的特定子例程。

已经解决了它


我试图分配给一个整数。抱歉。

经过一些挖掘,我发现发生错误的子例程不是我需要从python调用的(它只需要由模块中的子例程调用)。但是,我以前在将这些子例程保留在文件之外时遇到过麻烦-请参阅,如果不这样做,有没有办法让f2py知道不要为这些未使用的例程创建接口?或者我必须手动编辑pyf文件吗?是的,在f2py中,只需使用命令行选项“only:routine1 routine2:”来选择某些例程,或者使用“skip”来避免特定的例程。@DaveP非常感谢。我正在使用numpy.distutils编译和构建,那么setup.py脚本中是否有放置这些命令的位置?是的,只需将f2py_options=[“only:”、“routine1”、“routine2”和“:”]添加到扩展中即可object@DaveP干杯,你是救命恩人。似乎已经奏效了!