[Python] Cython unable to find shared object file

Discussão em 'Python' iniciado por Stack, Março 16, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to link to my own C library from Cython, following the directions I've found on the web, including this answer:

    Using Cython To Link Python To A Shared Library

    I am running IPython through Spyder.

    My setup.py looks like this:

    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    import numpy as np

    setup(
    ext_modules = cythonize(
    [Extension("*",["*.pyx"],
    libraries =["MyLib"],
    extra_compile_args = ["-fopenmp","-O3"],
    extra_link_args=["-L/path/to/lib"])
    ]),
    include_dirs = [np.get_include()],
    )


    The file libMyLib.so is in /path/to/lib and it compiles fine.

    I have a Python script in my IPython profile startup folder that does this

    try:
    os.environ["LD_LIBRARY_PATH"] += ":/path/to/lib"
    except KeyError:
    os.environ["LD_LIBRARY_PATH"] = "/path/to/lib"


    I can confirm that this is running, because if I type os.environ["LD_LIBRARY_PATH"] into the IPython interpreter, it returns /path/to/lib

    But when I try to load the Cython module (i.e. import mycythonmodule) I get:

    ImportError: libMyLib.so: cannot open shared object file: No such file or directory


    I've also tried putting libMyLib.so in other places to see if cython would find it:

    • In the directory where Python is running
    • On the Python path
    • In the same folder as the cython module

    But it still doesn't find the shared library. The only way I can get it to find the library is by dropping it in /usr/lib, but I don't want it there, I want to be able to set the library path.

    Am I missing something?

    Continue reading...

Compartilhe esta Página