Это странно.
Я использую Cython для создания пакета Python (назовем его mypackage
), который оборачивает внешнюю библиотеку (externallib
).externallib
написано на Фортране, но имеет интерфейсную библиотеку, написанную на C. Я использую эту интерфейсную библиотеку C для доступа к externallib
из Cython.
Разработка идет очень хорошо, вплоть до моментакогда я импортировал numpy
или любой другой пакет, зависящий от numpy
(например, pint
, matplotlib
, pandas
и т. д.), в модуль mypackage.core
(файл .pyx
).Я только импортирую эти пакеты и даже не использую их.Это приводит к ошибке сегментации.
Current thread 0x00007f02925ee740 (most recent call first):
File "build/temp/mypackage/core_test.py", line 191 in _test_runner
File "build/temp/mypackage/core_test.py", line 291 in test__str__
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/case.py", line 605 in run
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/case.py", line 653 in __call__
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/suite.py", line 122 in run
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/suite.py", line 84 in __call__
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/suite.py", line 122 in run
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/suite.py", line 84 in __call__
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/runner.py", line 176 in run
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/main.py", line 256 in runTests
File "/home/user/anaconda3/envs/mypackage-build-python3.6.5/lib/python3.6/unittest/main.py", line 95 in __init__
File "build/temp/mypackage/core_test.py", line 311 in <module>
../build/scripts/build-package-linux.sh: line 151: 22796 Segmentation fault (core dumped) python3 build/temp/mypackage/core_test.py
Ошибка сегментации возникает, когда я вызываю подпрограмму вычисления в externallib
, после того как я несколько раз вызывал ее для предоставления входных данных для расчета.
Я знаю, что Numpy также построен с Fortran, C и Cython под капотом.Есть ли что-то очевидное, что я должен искать для обеспечения совместимости между Numpy и другими внешними библиотеками C / Fortran?Что может быть причиной ошибки сегментации?
Спасибо за помощь.