ValueError: numpy.ndarray size changed
TL;DR
pip install --no-binary (ライブラリ名)
0. 발견의 경과
cpprb경기에서 개발한 강화학습용 라이브러리Kaggle를 사용하다가 당했다.
공책
import cpprb
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject
그리고 일단 실행에 성공한 노트북이 다시 실행될 때 발생했기 때문에 노트북에 설치된 버전의 문제라고 생각합니다.1. 문제의 근원
NumPy v1.20.0 시 ABI 변경이 있어 바이너리가 호환되지 않습니다.(노트 를 발행 하다・RP 및 검사
Size of
np.ndarray
and np.void_
changedPR 작성자는 최종 사용자에게 큰 영향을 미치지 않을 것으로 보고 영향을 미칠 수 있는 사용자(개발자)라도 실행 속도가 빨라져 기뻐할 것으로 내다봤다.
리뷰어는 바이너리가 호환되지 않을까 걱정했지만 파이톤의 정식 실시Cython도 CAPI의 바이너리 호환성을 보장하지 못한 것 같아서 동의했다.
cpprb에서는 Cython을 사용합니다.개발할 때 CI에서 아름다운 환경에 구축되어 있기 때문에 NumPyv1.20.0으로 구성되어 PyPI에 로그인되었습니다.
CPython
한편, 구버전의 NumPy를 요구하기 때문에 Kaggle과 다른 실제 사용 환경에 구버전의 NumPy를 추가하여 2진법이 호환되지 않는 실행에 오류가 발생했다.
2. 처리
(탈선) 터미널 사용자 측 처리
이 글의 주제에서 벗어났지만 잘못된 정보의 검색 결과로 볼 때 터미널 사용자를 위한 대응 방법을 먼저 적으세요.
이 프로그램 라이브러리는 다른 NumPy의 버전과 컴파일하는 데 문제가 있으니, 각자의 손 옆에서 원본 코드로 컴파일하십시오.
원본 코드도 PyPI에 업로드되면 다음 명령을 통해 구축될 가능성이 크다.(어떤 컴파일러와 프로그램 라이브러리가 필요한지 해당 라이브러리의 개발 원본 정보를 물어보세요.)
pip install --no-binary (ライブラリ名)
2.1 정보 수집
실제로 1장이 쓴 이유는 처음부터 알고 있었던 것이 아니라 관련 오류 정보 검색 등 조사에서 시작됐다.(NumPy 1.22.0이라는 새 버전이 방금 나왔는데 이미 알고 있습니다.)
조사 때는 젠의 폐지에 아직 쓰지 않은 정도TensorFlow라고 적어 고장 제거를 했다.
(부랴부랴 보충할 수 있기 때문에 이런 고장 제거는 매우 편리하다. 운이 좋으면 누군가가 조언을 해줄 수도 있다.)
GiLab의 issue
조사의 절차는 여기에 너무 자세하게 쓰여 있어 마음에 드는 사람은 폐기물을 보고 환경을 이용한 조사, 잘못된 정보 검색을 통해 유사 사례를 조사하고 관련 변경점을 확인할 수 있다.
2.2 수중 시험
바이너리의 호환성을 조사하기 위해 Docker를 이용해 테스트를 진행했다.
(프로젝트 소스 코드와 pip를 마운트하는 wheel (2진법) 캐시 디렉터리를 마운트하고 케이스에 들어갑니다.)
docker run -it -v (適当なディレクトリ):/root/.cache/pip -v (開発プロジェクトのパス):/cpprb python:3.8 bash
pip install numpy==1.19.5 && pip install /cpprb && pip install -U numpy==1.20.0 && python -c "import cpprb"
pip install numpy==1.20.0 && pip install /cpprb && pip install -U numpy==1.19.5 && python -c "import cpprb"
※ 사용
import
이라지만 오류가 있는지 확인할 수 있을 뿐, 더 열심히 사용하면 문제가 있을 수 있습니다.위에서 말한 바와 같이 TensorFolow는 구 버전의 NumPy를 요구하기 때문에 cpprb의 대다수 사용자는 NumPyv1을 요구한다.20.0을 사용하지 않은 것으로 추정되기 때문에 넘피v1.19.5에 작성된 파일이 PyPI에 등록됩니다.
2.3 CI의 대응 방안
NumPy를 설치한 다음 cpprb를 구축하기로 결정했습니다.또한 (실수로 실패했어요.)
==
는 직접 지정할 수 있고<
너무 많이 묶지 않으면 조개껍질로 해석된 파일의 방향을 바꾸는 입력이 잘못될 수 있습니다.(자계)pip install 'numpy<1.20.0'
pip install (ライブラリのパス)
2.4 방송
마지막으로 최근 제작된 지아이허브 디스커션스에서 애너언스먼트라는 분류를 새로 제작해 최종 이용자의 대처법을 알렸다.
우선 최신 cpprb로 업데이트합니다. 만약 그렇지 않다면 원본 파일부터 구축하십시오.
Discussions도 너무 적어서 더 많이 사용했으면 좋겠지만 절대적인 사용자 수가 적어졌어요(ry
Reference
이 문제에 관하여(ValueError: numpy.ndarray size changed), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ymd_h/articles/934a90e1468a05텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)