Home > Software engineering >  setup.py - building c-extension with Numpy dependency
setup.py - building c-extension with Numpy dependency

Time:07-11

I have created a simple c-function (using the guide here Create Numpy ufunc) and I'm now trying to distribute my package on pypi. For it to work, it needs to compile the c-file(s) into a .so -file, which then can be imported from python and everything is good. To compile it needs the header file numpy/ndarraytypes.h from Numpy.

When building and installing locally, it works fine. This since I know where the header files are located. However when distributing it, where can we find the Numpy folder? It is obvious from the logs that numpy gets installed before my package is built and installed so I just need to include the correct Numpy folder.

from setuptools import setup
from setuptools import Extension

if __name__ == "__main__":
    setup(
        name="myPack",
        install_requires=[
            "numpy>=1.22.3", # <- where is this one located after it gets installed?
        ],
        ext_modules=[
            Extension(
                'npufunc',
                sources=['npufunc.c'],
                include_dirs=[
                    # what to put here for it to find the "numpy/ndarraytypes.h" header file when installing?
                    "/usr/local/Cellar/numpy/1.22.3_1/lib/python3.9/site-packages/numpy/core/include/" # <- this one I have locally and when added, installtion works fine
                ]
            ),
        ]
    )

CodePudding user response:

You can query numpy for the include directory from python via

import numpy
numpy.get_include()

This should return a string (/usr/lib/python3.10/site-packages/numpy/core/include on my system) which you can add to the include_dirs. See here for the docs.

CodePudding user response:

check package.json

most installed files are usually there

  • Related