[Numpy-discussion] how to compile Fortran using setup.py

Robert Bradshaw robertwb at math.washington.edu
Mon Mar 14 17:00:12 EDT 2011


On Mon, Mar 14, 2011 at 1:44 PM, Ondrej Certik <ondrej at certik.cz> wrote:
> 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.

In the current Cython tip you can do

ext_modules = cythonize([Extension("qsnake.cmesh", [
        "qsnake/cmesh.pyx",
        "qsnake/fmesh.f90",
        ])]),

which will translate the .pyx file to a .c file before hitting distutils.

> So cmake seems like the only robust option anyway.
>
> Ondrej
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>



More information about the NumPy-Discussion mailing list