라고솔로가말했습니다
대표칭호 없음
SaidBySolo 8b58f951b6404b78ae3ba92d55d431f7
pyinstaller --onefille 인수는 temp폴더에 압축풀고 실행하는 방식
대충 현재 구조가 추출기가 임포트 될때 추출기가 등록되는 방식인데
그래서 코드를 일단
failed = [] for extension in [ re.sub(".py", "", file) for file in os.listdir(directory) if not "__" in file ]: try: import_module("rabbitark.extractor." + extension) except: traceback.print_exc() failed.append(extension) return failed
일케 짜놨는데
pyinstaller에서 extractor에있는 py 파일을 못 가져왔음 그래서 시도한게
--hidden-import 인수 였는데
그 파일은 포함이되지만 경로가 맞지않아서 로드가 되질 않음
그래서 삽질 하면서 결국 찾은 방법이
--add-data로 추출기 넣고 돌리자 라는 방법임
pyinstaller .\rabbitark\__main__.py --onefile --add-data="rabbitark\extractor\*;."
대충 일케 넣고 빌드한다음 추출기 로드 코드를 다음과 같이 짜줬음
if getattr(sys, "frozen", False): directory = getattr(sys, "_MEIPASS", os.path.abspath(os.path.dirname(__file__))) else: directory = os.path.dirname(os.path.realpath(__file__)) def load(): failed = [] for extension in [ re.sub(".py", "", file) for file in os.listdir(directory) if not "__" in file if os.path.splitext(file)[1] == ".py" ]: try: import_module( extension if getattr(sys, "frozen", False) else f"rabbitark.extractor.{extension}" ) except: traceback.print_exc() failed.append(extension) return failed
대충 설명하면 getattr(sys, "frozen", False)은 빌드가된것인지 확인하는거고
파이썬에서 실행할때 임포트 할때와 exe에서 실행할때 하고 다르기때문에 그거만 if문 써서 검사하도록하고 끝냈음
그리고 pyc pyo등 바이너리 파일도있기때문에 확실하게 검사하기위해서 ==를 써줬음
결국에는 됐는데 문제는
댓글이 없습니다.
새로운 댓글을 등록해 주세요!