Próbuję pobrać niektóre funkcje z dużej biblioteki współdzielonej w C++ (libbig.so) i udostępnić je w języku Python za pośrednictwem Cythona. Aby to zrobić, mam mały plik C++ (small.cpp), który zapewnia cienkie otoki wokół funkcjonalności z udostępnionej biblioteki, której potrzebuję, w sposób, który ułatwia wywoływanie przez Cython (pysmall.pyx).Dystrybucja biblioteki współużytkowanej i trochę kodu C z modułem rozszerzającym Cython
libbig.so -> small.cpp, small.h -> libsmall.so -> pysmall.pyx -> pysmall.cpp -> pysmall.so
mogę zbudować i uruchomić ten moduł rozszerzenia na mój własny komputer: Właśnie kompiluję small.cpp do libsmall.so, a następnie mówię "library = ['small']" w obiekcie Extension w setup.py, aby zbudować moduł rozszerzenia pysmall.so.
Teraz próbuję dystrybuować ten moduł rozszerzeń i mam trudności ze śledzeniem zasobów, które opisują najlepsze praktyki dotyczące dystrybucji, a także bibliotek źródłowych i współużytkowanych w C. Przeczytałem "Installing Python Modules", "Distributing Python Modules" i "Distributing Cython Modules". Rozumiem, jak samodzielnie dystrybuować moduł rozszerzenia. Nie jestem pewien co do najlepszego sposobu na dystrybucję zależności modułu rozszerzenia.
Dokumentacja Cython wskazuje, że należy dołączyć wygenerowane pliki .cpp, a także pliki .pyx, na wypadek, gdyby Cython nie był obecny, ale nie zawiera kodu demonstrującego, jak najlepiej radzić sobie w każdej sytuacji. Nie wspomina się również o tym, jak rozpowszechniać wspólne biblioteki, od których zależy moduł Cython.
Przeszukuję skrypty setup.py z pand, lxml, pyzmq, h5py i innych, i dzieje się sporo poza pracą. Jeśli ktoś ma wskazówki lub przykładowy kod, który może przyspieszyć ten proces, z pewnością to doceniam!
Należy pamiętać, że w nowszych wersjach 'setuptools' i' distutils' (używam 'setuptools' 5.7), polecenia zostały przeniesione do ich własnych modułów. Więc chciałbyś zrobić 'from setuptools.command.build_ext import build_ext' lub z' distutils' odpowiednio. – Midnighter
Twój pierwszy plik setup.py polega na tym, że importuje plik Cython.Distutils, zanim będzie mógł go zainstalować, jeśli go nie ma. – zneak
Inną opcją byłoby utworzenie pakietu conda, który mógłby być dołączony do pakietu 'libbig.so'. https://conda.io/docs/user-guide/tutorials/build-postgis.html – oLas