2011-08-21 4 views
2

나는 우분투 10.04에서 작동하고 파이썬 코드를 컴파일하기 위해 cython을 사용했습니다. 그런 다음 내 바이너리 2 개 (numpy와 하나, 하나는 제외)를 지원되는 커널 및 기타 배포본으로 복사하려고 시도했습니다 ... 유일한 방법은 내가별로 멋지지 않았던 것입니다. 그와 함께 제공되는 파이썬을 사용했습니다. 배포 (2.6), 그리고 내 우분투에서 복사 numpy 도서관.undefined _PyUnicodeUCS4_IsWhitespace 컴파일 된 cython + numpy

내가 numpy없이 실행하면 작동합니다. 내가 'numpy 가져 오기에서 ...'와 같은 하나를 exec 때 나는 같은 오류가 발생합니다 : undefined symbol: _PyUnicodeUCS4_IsWhitespace. 새로운 dist에서 파이썬 버전이 UCS2 인 곳에서 numpy가 UCS4 용으로 컴파일되었다고 생각했습니다. 하지만 놀랍게도, 파이썬과 같은 컴파일 된 파이썬 코드를 numpy로 임포트하면 작동합니다.

그래서 기본적으로 '파이썬'을 열어 numpy 라이브러리를 가져 오면 사용할 수 있다고 말할 수 있습니다. 하지만 컴파일 된 버전을 사용하고 있다면 - 그 UCS4 오류가 발생합니다 .. 아이디어가 있습니까?

는 (새로운 DIST는 내 컨트롤에 너무 많이하지 않고 난 정말 그냥 DIST에 내가 원하는 무엇이든 컴파일 할 수 없습니다)

감사합니다.

답변

0

Python 인터프리터를 실행할 때 libpython.so에서로드하려고하는 numpy 라이브러리를 가져 오면 Python이 (필자와 같이) 컴파일됩니다. 이것이 통역사와 함께 작동하는 이유입니다. 그래서 그 유니 코드 함수에 대한 요청은 numpy에서 온 것이 아니라 파이썬에서 왔기 때문에 컴파일 된 UCS2 함수를 사용합니다 (아마). 컴파일 된 버전을 실행할 때 다시 함수를로드하려고합니다. UCS4 버전을 검색하기 때문에 찾을 수 없습니다.

libpython에서 grep "_PyUnicode" 첫 번째 dist 및 두 번째 - 다른 UCS4 함수 하나와 다른 UCS2 함수가 있습니다.

그래서 "쉬운"해결책은 내 첫 번째 dist에서 컴파일하는 것입니다. UCS2 버전 Python, 그리고 Cython을 UCS2로 컴파일하도록 설정합니다. 저는 그 일을 할 것이라고 믿습니다.