본문 바로가기

카테고리 없음

[ENAS만판다] pyinstaller cupy 에러

pyinstaller로 빌드할때, 분명히 있는데도 cupy import에서 에러가 나서 빌드가 안되는 경우가 있다.

 

import cupy

단 한줄만 있는 

test.py를 생성해보자

 

 

이럴때는 pyinstaller -D --name test test.py 로 이름과 빌드하려는 파이썬 파일을 지정해주고 일단 실행을 시킨다.

 

그럼 test.spec이라는 파일이 나올것인데, 

 

이제 import 에러가 나올때마다 이 spec만을 건드려주면 된다.

 

import 에러 나올 때, import cupy._core가 없다고 하면

test.spec 안에 

hiddenimports에 차곡차곡 하나씩 넣어주면 된다.

리스트이고 스트링으로 넣어주면 된다.

 

hiddenimports = ['cupy._core', 'cupy._fusion',등등]

 

다 넣어주고 저장한 다음에

pyinstaller -D test.spec으로 실행시키면 된다.

(-D말고 --onefile로 해도됌. onefile하면 라이브러리없이 딱 하나의 앱만 나옴. 당연히 무게는 좀 나감)

 

그리고 dist/test/test 실행시켜보자.

 

그럼 또 import 에러가 뜰 것이다.

그럼 또 반복...

 

간혹 flags가 import 안된다고 하는 경우가 있다.

그럼 flags로 넣지말고, cupy._core.flags로 넣어주면 된다.

cupy import 하다가 생긴 것이기 때문에...

 

그래서 python3를 실행시켜서 하나씩 어디에 있는 지 import 해보면서 차근차근하면 된다.

 

근데 이 과정이 은근 디펜던시가 많아서 나같은 경우에는 한 열 몇번을 계속 했었다.

 

본인에게 맞게끔 (cupy 버젼 등등) 하는 것이 중요하다. 웹에 있는 것들을 그대로 넣지말고..

 

내 경우에는 이것들만 넣었더니 실행이 되었었다.

 

hiddenimports = [

'cupy_backends.cuda.stream',

'cupy._core._carray',

'fastrlock',

'fastrlock.rlock',

'cupy._core._cub_reduction',

'cupy._core._ufuncs',

'cupy._core._routines_sorting',

'cupy._core.flags',

'cupy._core.new_fusion',

'cupy._core._fusion_trace',

'cupy._core._fusion_variable',

'cupy._core._fusion_op',

'cupy._core._fusion_optimization',

'cupy._core._fusion_kernel',

]