Этот вопрос связан с парой вопросов в 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