Ошибка Cython ImportError: @ rpath / libc ++ библиотека abi.1.dylib не загружена в среде Python conda - PullRequest
0 голосов
/ 23 ноября 2018

Я впервые пробую это базовое руководство по Cython .Я нахожусь в среде conda с Python 3.6.6.

Все работает до того момента, когда я хочу импортировать модуль:

In [1]: import helloworld                                                       
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-39f3e3c18221> in <module>
----> 1 import helloworld

ImportError: dlopen(/Users/billtubbs/cython-examples/helloworld.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libc++abi.1.dylib
  Referenced from: /Users/billtubbs/anaconda/envs/py36/lib/libc++.1.dylib
  Reason: image not found

Кажется, что проблема с моей средой такЯ пытался обновить все:

$ conda update numpy numba pandas scipy scikit-learn pytorch matplotlib statsmodels tensorflow keras cython

Я видел некоторые подобные проблемы, но при других обстоятельствах и ничего недавнего.

Как вы начинаете отлаживать такую ​​проблему, какthis?

Шаги, ведущие к этому:

helloworld.pyx:

print("Hello World")

setup.py:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("helloworld.pyx")
)

Согласно учебному пособию:

(py36) $ python --version
Python 3.6.6
(py36) $ python setup.py build_ext --inplace
Compiling helloworld.pyx because it changed.
[1/1] Cythonizing helloworld.pyx
/Users/billtubbs/anaconda/envs/py36/lib/python3.6/site-packages/Cython/Compiler/Main.py:367: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /Users/billtubbs/cython-examples/helloworld.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)
running build_ext
building 'helloworld' extension
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/Users/billtubbs/anaconda/envs/py36/include -mmacosx-version-min=10.9 -m64 -fPIC -I/Users/billtubbs/anaconda/envs/py36/include -mmacosx-version-min=10.9 -m64 -fPIC -I/Users/billtubbs/anaconda/envs/py36/include/python3.6m -c helloworld.c -o build/temp.macosx-10.9-x86_64-3.6/helloworld.o
clang -bundle -undefined dynamic_lookup -Wl,-rpath,/Users/billtubbs/anaconda/envs/py36/lib -L/Users/billtubbs/anaconda/envs/py36/lib -headerpad_max_install_names -headerpad_max_install_names -mmacosx-version-min=10.9 -lc++ -Wl,-rpath,/Users/billtubbs/anaconda/envs/py36/lib -L/Users/billtubbs/anaconda/envs/py36/lib -Wl,-rpath,/Users/billtubbs/anaconda/envs/py36/lib -L/Users/billtubbs/anaconda/envs/py36/lib -headerpad_max_install_names -headerpad_max_install_names -mmacosx-version-min=10.9 -lc++ -Wl,-rpath,/Users/billtubbs/anaconda/envs/py36/lib -L/Users/billtubbs/anaconda/envs/py36/lib -arch x86_64 build/temp.macosx-10.9-x86_64-3.6/helloworld.o -L/Users/billtubbs/anaconda/envs/py36/lib -o /Users/billtubbs/cython-examples/helloworld.cpython-36m-darwin.so
(py36) $ ls
__pycache__
build
helloworld.c
helloworld.cpython-36m-darwin.so
helloworld.pyx
setup.py

Выход conda list равен здесь , если это необходимо.

ОБНОВЛЕНИЕ

Согласно @mervПредположим, что здесь вывод otool, который «отображает имена и номера версий общих библиотек, которые использует объектный файл»:

$ otool -L /Users/billtubbs/anaconda/envs/py36/lib/libc++.1.dylib
/Users/billtubbs/anaconda/envs/py36/lib/libc++.1.dylib:
    @rpath/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 48.0.0)
    @rpath/libc++abi.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
...