파이썬 배치 파일 오류 도움 부탁드립니다.
알림
|
페이지 정보
작성일
2024.07.06 13:55
본문
안녕하십니까~
파이썬을 공부해보고 있는데 엑셀 변환 프로그램을 만들고 있는 중 실행 파일에서 막혀서 도움 요청 드리려고 합니다. ;;
tkdnd 기능이 vscode 에서 실행 할때는 잘되는데 배치파일(exe)로 만들어서 하면 아래 오류 부분이 발생해서
작동이 안되네요 ㅜㅜ .. 혹시 가르침을 주실 분 계실까요 ? 감사합니다.
Traceback (most recent call last):
File "tkinterdnd2\TkinterDnD.py", line 53, in _require
_tkinter.TclError: can't find package tkdnd
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "Amkor1.py", line 262, in <module>
File "tkinterdnd2\TkinterDnD.py", line 285, in __init__
File "tkinterdnd2\TkinterDnD.py", line 55, in _require
RuntimeError: Unable to load tkdnd library.
[7672] Failed to execute script 'Amkor1' due to unhandled exception!
댓글 8
/ 1 페이지
찰리브라운님의 댓글
위의 문제를 해결하기 위해 몇 가지 추가 조치를 취해야 합니다. 특히, `tkdnd` 라이브러리와 `tkinterdnd2` 모듈을 포함하여 배포할 때 필요한 구성 요소를 정확히 포함시키는 것이 중요합니다. 아래의 단계를 따라 문제를 해결해 보세요:
1. **`tkdnd` 라이브러리 파일 찾기:**
`tkdnd` 라이브러리가 설치된 위치를 확인합니다. 일반적으로 `tkdnd`는 Tcl/Tk 확장 라이브러리로 설치됩니다.
```bash
find /path/to/python/site-packages -name "tkdnd*"
```
위 명령어를 사용하여 `tkdnd` 라이브러리 파일의 위치를 찾을 수 있습니다. Windows에서는 해당 경로를 수동으로 탐색하여 찾을 수 있습니다.
2. **`tkdnd` 라이브러리 복사:**
PyInstaller의 `--add-binary` 옵션을 사용하여 `tkdnd` 라이브러리를 실행 파일에 포함시킵니다.
```bash
pyinstaller --onefile --add-binary "path/to/tkdnd;tkinterdnd2/tkdnd" your_script.py
```
예를 들어, `tkdnd` 라이브러리가 `C:\Python38\Lib\site-packages\tkdnd`에 설치되어 있다면:
```bash
pyinstaller --onefile --add-binary "C:/Python38/Lib/site-packages/tkdnd/tkdnd2.8;tkinterdnd2/tkdnd" your_script.py
```
3. **hook 파일 생성 및 수정:**
이미 언급된 `hook-tkinterdnd2.py` 파일을 다음과 같이 작성합니다:
```python
from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
datas = collect_data_files('tkinterdnd2')
binaries = collect_dynamic_libs('tkinterdnd2')
```
이 파일을 프로젝트 디렉터리의 `hooks` 디렉터리에 저장합니다.
4. **PyInstaller 실행:**
PyInstaller를 실행할 때 추가적인 hook 디렉터리를 지정합니다.
```bash
pyinstaller --additional-hooks-dir=./hooks --onefile --add-binary "path/to/tkdnd;tkinterdnd2/tkdnd" your_script.py
```
5. **실행 파일 테스트:**
생성된 실행 파일을 테스트하여 `tkdnd` 라이브러리가 제대로 포함되어 실행되는지 확인합니다.
이 단계를 통해 `tkinterdnd2`와 `tkdnd` 라이브러리를 포함한 실행 파일을 생성할 수 있을 것입니다. 추가적인 문제가 발생할 경우, 해당 에러 메시지를 참고하여 필요한 추가 설정을 할 수 있습니다.
1. **`tkdnd` 라이브러리 파일 찾기:**
`tkdnd` 라이브러리가 설치된 위치를 확인합니다. 일반적으로 `tkdnd`는 Tcl/Tk 확장 라이브러리로 설치됩니다.
```bash
find /path/to/python/site-packages -name "tkdnd*"
```
위 명령어를 사용하여 `tkdnd` 라이브러리 파일의 위치를 찾을 수 있습니다. Windows에서는 해당 경로를 수동으로 탐색하여 찾을 수 있습니다.
2. **`tkdnd` 라이브러리 복사:**
PyInstaller의 `--add-binary` 옵션을 사용하여 `tkdnd` 라이브러리를 실행 파일에 포함시킵니다.
```bash
pyinstaller --onefile --add-binary "path/to/tkdnd;tkinterdnd2/tkdnd" your_script.py
```
예를 들어, `tkdnd` 라이브러리가 `C:\Python38\Lib\site-packages\tkdnd`에 설치되어 있다면:
```bash
pyinstaller --onefile --add-binary "C:/Python38/Lib/site-packages/tkdnd/tkdnd2.8;tkinterdnd2/tkdnd" your_script.py
```
3. **hook 파일 생성 및 수정:**
이미 언급된 `hook-tkinterdnd2.py` 파일을 다음과 같이 작성합니다:
```python
from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
datas = collect_data_files('tkinterdnd2')
binaries = collect_dynamic_libs('tkinterdnd2')
```
이 파일을 프로젝트 디렉터리의 `hooks` 디렉터리에 저장합니다.
4. **PyInstaller 실행:**
PyInstaller를 실행할 때 추가적인 hook 디렉터리를 지정합니다.
```bash
pyinstaller --additional-hooks-dir=./hooks --onefile --add-binary "path/to/tkdnd;tkinterdnd2/tkdnd" your_script.py
```
5. **실행 파일 테스트:**
생성된 실행 파일을 테스트하여 `tkdnd` 라이브러리가 제대로 포함되어 실행되는지 확인합니다.
이 단계를 통해 `tkinterdnd2`와 `tkdnd` 라이브러리를 포함한 실행 파일을 생성할 수 있을 것입니다. 추가적인 문제가 발생할 경우, 해당 에러 메시지를 참고하여 필요한 추가 설정을 할 수 있습니다.
천중도님의 댓글의 댓글
@찰리브라운님에게 답글
노트북이 고장이나서 못해보고 있는데, 고쳐지는대로 알려주신내용으로 해보겠습니다 감사합니다^^
달2님의 댓글
exe 파일 생성할때 필요 라이브러리를 포함하도록 하는 옵션이 있을거에요.