[Numpy-discussion] how to compile Fortran using setup.py
Ondrej Certik
ondrej at certik.cz
Mon Mar 14 16:44:27 EDT 2011
Hi Pearu!
On Sat, Mar 12, 2011 at 2:30 AM, Pearu Peterson
<pearu.peterson at gmail.com> wrote:
>
>
> On Fri, Mar 11, 2011 at 3:58 AM, Ondrej Certik <ondrej at certik.cz> wrote:
>>
>> Hi,
>>
>> I spent about an hour googling and didn't figure this out. Here is my
>> setup.py:
>>
>> setup(
>> name = "libqsnake",
>> cmdclass = {'build_ext': build_ext},
>> version = "0.1",
>> packages = [
>> 'qsnake',
>> 'qsnake.calculators',
>> 'qsnake.calculators.tests',
>> 'qsnake.data',
>> 'qsnake.mesh2d',
>> 'qsnake.tests',
>> ],
>> package_data = {
>> 'qsnake.tests': ['phaml_data/domain.*'],
>> },
>> include_dirs=[numpy.get_include()],
>> ext_modules = [Extension("qsnake.cmesh", [
>> "qsnake/cmesh.pyx",
>> "qsnake/fmesh.f90",
>> ])],
>> description = "Qsnake standard library",
>> license = "BSD",
>> )
>>
>
> You can specify Fortran code, that you don't want to process with f2py, in
> the libraries list
> and then use the corresponding library in the extension, for example:
>
> setup(...
> libraries = [('foo', dict(sources=['qsnake/fmesh.f90']))],
> ext_modules = [Extension("qsnake.cmesh",
> sources =
> ["qsnake/cmesh.pyx"],
> libraries = ['foo']
> )],
> ...
> )
>
> See also scipy/integrate/setup.py that resolves the same issue but just
> using the configuration function approach.
Indeed, I just tried it and it works! Thanks. I am now able to compile
fortran code into the extension module.
The only problem is that I am not able to convince Cython to also
parse the .pyx files, it clashes with the numpy's implementation of
build_ext. Which usually is not a problem, as long as one doesn't need
to compile Fortran and .pyx at the same time.
So cmake seems like the only robust option anyway.
Ondrej
More information about the NumPy-Discussion
mailing list