这很奇怪。
我正在使用Cython构建包装外部库(mypackage
)的Python程序包(我们称之为externallib
)。 externallib
用Fortran编写,但是有一个用C编写的接口库。我使用这个C接口库从Cython访问externallib
。
直到我导入numpy
或依赖于numpy
的任何其他软件包(例如pint
,matplotlib
,{{ 1}}等)放入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外部库之间的兼容性吗?造成细分错误的原因是什么?
感谢您的帮助。