인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

초칼라님의 프로필 이미지
초칼라

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

나만의 앱 실행파일(.exe)로 만드는 방법

실행 파일을 만들 때 모든 파일이 동일한 Dir에 있어야 하나요?

작성

·

100

·

수정됨

0

실행 파일을 생성시에 사용된 모든 파일이 동일 디렉토리에 있어야 하나요?

(재활용을 위해 Function을 만들어서, Function 폴더에 저장함)

 

아래는 제가 작업했던 내용 및 에러입니다.

============================

 

Python 폴더 아래와 같이 폴더가 있습니다.

  • Project

  • GUI

  • Function

Project 폴더에 실행할 a.py 파일이 있고

a.py에서는 GUI, Function 폴더에 있는 ui와 function 들을 사용합니다.

 

vs code 상에서 실행하면 문제 없이 실행이 됩니다.

 

실행 파일을 만들기 위해 Project dir로 이동하고, 아래와 같이 실행하여 exe 파일을 생성했습니다.

E:\python\Project> pyinstaller -w -F 네이버부동산_상가.py

 

파일을 실행하니 아래와 같이 나타납니다.

image.png

 

import sys, os
try:
    sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
except:
    notebook_dir = os.getcwd()
    sys.path.append(os.path.dirname(os.path.abspath(notebook_dir)))

from PySide6.QtWidgets import QApplication, QWidget, QMessageBox
from GUI.naverland_SG_ui import Ui_Form
from GUI.Naver_map import *
from Functions.Naver_land import *

import sys
import requests
import json
import math

class MainWindow(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.file_path = os.getcwd() + r'\data'
        
        # 지역 초기화
        self.loc1.clear()
        self.loc1.addItem('')
        self.loc2.clear()
        self.loc2.addItem('')
        self.loc3.clear()
        self.loc3.addItem('')

 

 

 

 

답변 2

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

지금 정확히 어떤 폴더구조를 만들어 놓으신건지 잘 파악이 안되는데요

(스크린샷을 찍어주시면 확인해 보겠습니다)

 

일단 하나는 확실합니다 GUI 모듈을 불러올 수 없다는 것은

네이버부동산_상가.py 에서 GUI 모듈을 찾을 수 없다는 것이고,
경로 설정이 잘못된 것으로 판단됩니다.

 

경로 설정이 헷갈린다면 같은 폴더 상에서 작업하는게 속이 편하실 겁니다 🙂

초칼라님의 프로필 이미지
초칼라
질문자

감사합니다. 같은 폴더에서는 잘 되는 것 확인했습니다. ^^

0

안녕하세요, 인프런 AI 인턴입니다.

실행 파일을 만들 때 모든 파일이 동일한 디렉토리에 있을 필요는 없습니다. 하지만, 실행 파일을 생성할 때 사용되는 모듈과 리소스 파일들이 올바르게 참조될 수 있도록 설정해야 합니다. 사용하신 pyinstaller를 이용하여 실행 파일을 생성하실 때, 해당 모듈이 참조하는 다른 폴더에 있는 파일들도 함께 포함되도록 하기 위해 몇 가지 방법을 사용할 수 있습니다.

  1. --add-data 옵션을 사용하여 필요한 추가 파일이나 디렉토리를 지정할 수 있습니다. 이 옵션을 통해 필요한 리소스 파일이나 모듈 디렉토리를 지정할 수 있으며, 사용법은 다음과 같습니다.

    • pyinstaller --add-data "src;dest" your-script.py
    • 여기서 src는 포함할 파일/디렉토리의 경로이고, dest는 실행 파일 내에서 해당 파일/디렉토리가 위치할 경로입니다.
  2. hook 파일을 만들어 pyinstaller가 모듈을 찾을 수 있도록 도와줄 수도 있습니다. hook 파일은 특정 라이브러리나 패키지에 대해 pyinstaller가 처리 방법을 알려주는 역할을 합니다.

  3. 스크립트 내에서 동적으로 모듈 경로를 추가하는 방법인 sys.path.append를 사용하셨는데, 이 경우에도 pyinstaller가 해당 디렉토리의 모듈을 찾을 수 있도록 옵션을 추가해야 합니다.

오류 메시지에 따르면 ‘GUI’ 모듈을 찾지 못하는 문제가 발생했습니다. 이는 pyinstallerGUI 모듈이 포함된 디렉토리를 찾지 못했거나, 실행 파일을 생성할 때 해당 디렉토리를 포함시키지 않았기 때문일 수 있습니다.

따라서, --add-data 옵션을 사용하여 필요한 모든 파일과 디렉토리를 포함시키는 것이 중요합니다. 예를 들어, GUI와 Function 폴더를 실행 파일에 포함시키기 위해서는 다음과 같이 명령어를 작성할 수 있습니다.

pyinstaller -w -F --add-data "GUI;GUI" --add-data "Functions;Functions" 네이버부동산_상가.py

이렇게 하면 GUI 및 Functions 디렉토리와 그 안의 모든 파일이 실행 파일에 포함되어 참조 오류 없이 프로그램이 실행될 것입니다.

초칼라님의 프로필 이미지
초칼라

작성한 질문수

질문하기