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',
]