python exe 파일 실행시 failed to execute script 오류 해결하기
일단, pyinstaller를 삭제하고 다시 설치해 보겠습니다.
pip uninstall pyinstaller |
다시 설치하기
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip |
다시 auto-py-to-exe 를 실행합니다.
하지만. 동일한 오류가 발생합니다. pyinstaller 버젼이나 설치오류와는 아무 관련이 없었습니다.
다시.. 여기 사이트를 참조하여 다시 해 보겠습니다.
In PyInstaller, Why Won't NumPy.Random.Common Load as a Module?
import pandas as pd 앞부분에 붉은색 부분 추가합니다.
# 추가한 부분 import numpy.random.common import numpy.random.bounded_integers import numpy.random.entropy import pandas as pd |
다음과 같이 다시 pyinstaller를 실행해 봅니다.
pyinstaller --icon=test.ico --onefile --noconsole -F -n goldcoin.exe -c --clean main.py -F: 한 개의 파일로 만들기. 용량은 당연히 조금더 커진다. (없을 시 dll 파일들과 분리되어 폴더로 생성됨) -n: 이름짓기. 이름은 바로 오른쪽에 기입 (없을 시 소스파일명과 동일한 파일이 생성됨) --noconsole: exe파일 실행시 콘솔창 띄우지 않기 --onefile: import 된 라이브러리를 따로 생성하지 않고 exe 파일 안에 다 넣고 싶은 경우 --icon=test.ico: 실행파일의 아이콘을 바꾸고 싶다면 추가 |
D:\PycharmProject\BithumAPI\dist 여기에 goldcoin.exe파일이 잘 만들어져 있네요.
하지만.. 실행시에 다음과 같은 오류가 또...
GUI 라이브러리를 사용할 때는 pyinstaller 후 생성된 .spec 파일을 수정해야 된다고 하네요.
(1) .spec 파일에서 라이브러리를 추가하고, coll 부분을 수정
(2) pyinstaller .spec
(3) .exe 파일 실행
함 해 보죠..
상세내용은 여기를 참조하라고 하네요..
kivy.org/doc/stable/guide/packaging-windows.html
다음은 main.spec의 내용입니다.
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['main.py'], pathex=['D:\\PycharmProject\\BithumAPI'], binaries=[], datas=[('./TA_Lib-0.4.19-cp37-cp37m-win32.whl', '.')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='goldcoin.exe', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True ) |
이번에는 수정한 spec파일을 pyinstaller 실행합니다.
pyinstaller --icon=.\image\goldcoin_1.ico --onefile --noconsole -F -n goldcoin.exe -c --clean main.spec |
여전히 talib.stream 모듈을 찾을수 없다는 에러가 떠서,
python 소스에 추가해 주었습니다.
import talib
import talib.stream
이제 talib.stream오류는 해결되었나 봅니다.
다른 오류가 뜹니다.
KeyError: 'formatters'
원인을 보니, log config파일을 실행단계에서 logging.conf파일을 가져오지 못하는 오류인것으로 보입니다.
일반적으로 py파일을 실행할때는 아무 문제가 없던 부분입니다.
하기 붉은 색 부분을 os.path함수를 이용해서 명시적으로 path를 지정해 줍니다.
#!/usr/bin/python # -*- coding: utf-8 -*- import logging.config from datetime import datetime import os class Logging(): def __init__(self, config_path='config/logging.conf', log_path='log'): folderPath3 = os.path.abspath(os.getcwd()) + '/config' if not os.path.isdir(os.path.abspath(os.getcwd()) + '/config'): os.makedirs(os.path.abspath(os.getcwd()) + '/config') folderPath3 = str(folderPath3) config_path = os.path.abspath(folderPath3 + str("\\logging.conf")) folderPath3 = os.path.abspath(os.getcwd()) + '/log' if not os.path.isdir(os.path.abspath(os.getcwd()) + '/log'): os.makedirs(os.path.abspath(os.getcwd()) + '/log') log_path = str(folderPath3) self.config_path = config_path self.log_path = log_path |
하지만, 소용이 없어 보입니다.
결국, pyinstaller에서 exe 실행파일 만들때는 log용 formater는 사용할 수가 없을 것 같습니다.
결국 모든 log 파일용 format 설정정보와 함수는 모두 지운후에 다시 실행해 보니, 정상적으로 exe파일이 실행됩니다.
pyinstaller --icon=.\image\goldcoin_1.ico --onefile --noconsole -F -n goldcoin.exe -c --clean main.spec |
추가로, goldcoin.exe가 죽으면 계속해서 끊임없이 다시 실행시켜줄 ParentTrader.exe파일도 만들었습니다.
pyinstaller --onefile --noconsole -F -n ParentTrader.exe -c --clean ParentTrader.py |
ParentTrader.exe를 실행하니, 다음과 같은 command창이 뜨면서 main창이 뜹니다.
여기서 "빗썸코인거래 시작"버튼을 누르면, 빗썸으로 자동접속되면서 매수추천 및 자동매매가 시작됩니다.
폴더내의 전체 파일 및 하위폴더 구조입니다.
'가상화폐' 카테고리의 다른 글
빗썸API 자동매매일지 2021.04.08 22:30 (0) | 2021.04.08 |
---|---|
코인API 자동매매일지-2021.04.04 (0) | 2021.04.04 |
코인API 자동매매일지-2021.04.03 (0) | 2021.04.03 |
코인API 자동매매일지-2021.04.02 (3) | 2021.04.02 |
빗썸API 호출시 에러 코드 (0) | 2020.09.22 |