Ошибка в скрипте установки при компиляции расширения Fortran: «Нет такого файла или каталога» - PullRequest
0 голосов
/ 02 апреля 2012

Мне удалось обернуть набор источников Fortran 90 вручную, используя f2py.Для этого я сгенерировал файл подписи, как описано в: http://docs.scipy.org/doc/numpy/user/c-info.python-as-glue.html, и я могу получить .so, который я могу вызвать из некоторых файлов интерфейса Python.

Теперь я хочу создать пакет изэто, которое автоматически построит расширение Fortran.Единственным дополнением в папке, содержащей исходные файлы и файл подписи Fortran, теперь является файл setup.py со следующим содержимым:

from numpy.distutils.core import setup, Extension
from numpy.distutils.misc_util import Configuration

DISTNAME = 'greengard'

def configuration(parent_package='',top_path=None):
    config = Configuration(DISTNAME, parent_package, top_path)
    # the Fortran sources
    f90_sources = ['_greengard.pyf'
                   'nufft1df90.f',
                   'nufft2df90.f',
                   'nufft3df90.f',
                   'next235.f',
                   'dfftpack.f',
                   ]
    config.add_extension('_greengard', f90_sources)
return config

if __name__ == "__main__":
    setup(configuration=configuration) 

Затем активировал virtualenv и попытался установить пакет

python setup.py install 

Но в конце получите следующую ошибку:

creating build/temp.linux-x86_64-2.7/build/src.linux-x86_64-2.7/greengard
compile options: '-Ibuild/src.linux-x86_64-2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c'
gcc: build/src.linux-x86_64-2.7/greengard/_greengardmodule.c
gcc: build/src.linux-x86_64-2.7/fortranobject.c
compiling Fortran sources
Fortran f77 compiler: /usr/bin/gfortran -Wall -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran f90 compiler: /usr/bin/gfortran -Wall -fno-second-underscore -fPIC -O3 -funroll-loops
Fortran fix compiler: /usr/bin/gfortran -Wall -ffixed-form -fno-second-underscore -Wall -fno-second-underscore -fPIC -O3 -funroll-loops
compile options: '-Ibuild/src.linux-x86_64-2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c'
error: _greengard.pyfnufft1df90.f: No such file or directory

Первая строка после запуска setup.py дала:

non-existing path in '': '_greengard.pyfnufft1df90.f'

Но процесс установки продолжается, и расширение Fortran кажетсябыть скомпилированным (отображаемые строки выглядят так, как я получаю, запустив f2py вручную).

Я пытался найти решение из примеров, доступных онлайн, но большинство из них были слишком просты, чтобы быть полезными.Может ли кто-нибудь с опытом в упаковке Python помочь мне в этом, пожалуйста?

1 Ответ

0 голосов
/ 02 апреля 2012

Попробовав немного больше, я понял, что неправильно очищаю промежуточный каталог "Build", созданный при вызове скрипта установки.Последний, должно быть, сохранил одну из моих предыдущих неудачных попыток, когда путь к общему расширению был указан неверно.

Я повторил попытку с пустым примером, и установка в пакеты сайта моего virtualenv прошла успешно.

...