Этот вопрос связан с парой вопросов в SO, например этот и этот другой . К сожалению, решение пока не работает для меня. У меня есть файл module.pxc, который я компилирую с помощью файла setup.py, такого как следующий:
# setup.py
module_extension = Extension(
name="iolif",
sources=["/home/maurizio/Ongoing.Projects/c_libraries/dcomplex_libc.c",
"/home/maurizio/Ongoing.Projects/c_libraries/special_functions_libc.c",
"/home/maurizio/Ongoing.Projects/c_libraries/models/freq_cv_libc.c",
"module.pyx"],
libraries=['gsl', 'gslcblas', 'm'],
# library_dirs=["lib"],
include_dirs=["/home/maurizio/Ongoing.Projects/pycustommodules",
"/home/maurizio/Ongoing.Projects/c_libraries",
"/home/maurizio/Ongoing.Projects/c_libraries/models"]
)
setup(
name="iolif",
ext_modules=cythonize([module_extension])
)
Из командной строки, в том же каталоге module.pxc, при записи компиляция python setup.py build_ext --inplace работает нормально, и создается библиотека iolif.so. Проблема в том, что я могу импортировать эту библиотеку только в том случае, если я использую Python2.7, тогда как если я попытаюсь импортировать ее в Python3.x, я получу известную ImportError: dynamic module does not define module export function (PyInit_iolif).
Погуглив, и, как указано в двух вопросах, связанных выше, кажется, что это связано с тем, что cython смотрит на Python2.7, а не на Python3.x (с которым я вместо этого работаю). Соответственно, я попытался попросить cythonize в моем setup.py использовать Python3.x следующим образом:
...
setup(
name="iolif",
ext_modules=cythonize([module_extension],
compiler_directives={'language_level': "3"})
)
но это все еще не работает. Последнее сообщение компиляции действительно производит:
gcc -pthread -shared -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -
specs=/usr/lib/rpm/redhat/redhat-hardened-ld build/temp.linux-x86_64-2.7/pylif_io.o
build/temp.linux-x86_64-2.7/home/maurizio/Ongoing.Projects/c_libraries/dcomplex_libc.o
build/temp.linux-x86_64-2.7/home/maurizio/Ongoing.Projects/c_libraries/special_functions_libc.o build/temp.linux-x86_64-2.7/home/maurizio/Ongoing.Projects/c_libraries/models/freq_cv_libc.o -L/usr/lib64
-lgsl -lgslcblas -lm -lpython2.7 -o /home/maurizio/Ongoing.Projects/DePitta.PNAS/Software/LIF.Analysis/iolif.so
где вы можете видеть, что он все еще связан с библиотекой -lpython2.7 (тогда как он должен использовать, например, -lpython3.7m). Как мне это решить? Что мне не хватает?
pdfpc, не будут работать в GNOME. Кроме того, Fedora 30+ использует Wayland, что еще больше усложняет ситуацию... 07.06.2020