Ich versuche, meine eigene C-Bibliothek von Cython zu verknüpfen, nach den Anweisungen die ich im Internet gefunden habe, auch diese Antwort:Cython nicht in der Lage Shared Object-Datei finden
Using Cython To Link Python To A Shared Library
ich laufe IPython über Spyder.
Mein setup.py sieht wie folgt aus:
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()],
)
Die Datei libMyLib.so
in /path/to/lib
ist und es kompiliert in Ordnung.
Ich habe ein Python-Skript in meinem IPython Profil Startordner, das dies tut
try:
os.environ["LD_LIBRARY_PATH"] += ":/path/to/lib"
except KeyError:
os.environ["LD_LIBRARY_PATH"] = "/path/to/lib"
Ich kann bestätigen, dass dies ausgeführt wird, denn wenn ich os.environ["LD_LIBRARY_PATH"]
in den IPython Dolmetscher geben, es /path/to/lib
zurück aber wenn ich versuche, das Cython Modul zu laden (dh import mycythonmodule
) erhalte ich:
ImportError: libMyLib.so: cannot open shared object file: No such file or directory
ich habe auch tr ied libMyLib.so in anderen Orten setzen zu sehen, ob cython es finden würde:
- In dem Verzeichnis, in Python läuft
- Auf dem Python-Pfad
- Im selben Ordner wie die cython Modul
Aber es findet immer noch nicht die gemeinsame Bibliothek. Die einzige Möglichkeit, die Bibliothek zu finden, ist es, sie in /usr/lib
ablegen, aber ich will es nicht dort, ich möchte in der Lage sein, den Bibliothekspfad zu setzen.
Fehle ich etwas?