2017-01-26 1 views
0

나는 배포 할 수있는 1 파일 실행 파일로 만들기 위해 작업중인 Python 3 스크립트 인 inventoryScraper.py를 가지고 있습니다. Python 3에서 Pyinstaller 3을 사용 해왔다. 과거에는 그랬다. 내 스크립트를 실행해야하는 'Store_Codes.csv'파일이 있는데 실행 파일 안에 포함 시키길 원합니다.Pyinstaller 3 --onefile을 사용하여 데이터 파일 추가

나는 이것에 대한 이전의 모든 대답을 읽고 시도했으나 효과가 없었습니다./나는 그것을 엉망으로 만들었습니다. 결과 .exe는 Store_Codes.csv가 exe와 같은 폴더에있을 때 작동하지만 그렇지 않은 경우 작동합니다. 나는 확실히 파이썬의 초심자이지만,이 명령을 내리는 사람은 커맨드 라인이나 다른 것과 관련된 경험이 전혀 없으므로 올인원 파일이라는 것이 중요합니다.

다른 게시물에서 본 모든 방법으로 스펙 파일을 수정했으며 아무도 작동하지 않았습니다. 나는 오해하고 있다고 확신하며 실제로 도움을 사용할 수 있습니다.

Pyinstaller 3에서 하나의 파일 exe에 데이터 파일을 포함시키는 간단한 방법은 무엇입니까?

감사합니다. 메인 스크립트에서

csv_codes = """ 

csv file content... 

""" 

:

답변

0

는 그럼 파일을 편집하여 Store_Codes.csvStore_Codes.py로 이름을 변경, 주변에 실제로 쉬운 작업있다 import Store_Codes 다음 csv_file_content = Store_Codes.csv_codes.

pyinstaller에서 --onefile을 사용하면 새로 생성 된 exe 파일에 자동으로 Store_Codes.py이 포함됩니다.

P. 이 CSV 파일에 utf-8 인코딩 된 콘텐츠가 있다면, # -*- coding: utf-8 -*-

+0

있을 것입니다 당신이 datas=[('Store_Codes.csv', 'another_folder')]을 사용하여 다른 폴더를 만들 수 있습니다 조직,하지만 난 "ImportError를 '상점 코드 (store_code)'라는 이름의 모듈을"얻을 – Clive

+0

'Store_Codes을 넣었습니까?py'를 메인 스크립트와 같은 폴더에 넣으시겠습니까? – Shane

+0

그래도 여전히 오류가 발생하며 주 스크립트를 테스트 한 결과 정상적으로 작동합니다. – Clive

0
  1. 는 평 파일과 같은 폴더에 Store_Codes.csv을 넣어 잊지 마세요. 을 .spec 파일의 필드 data
  2. 당신은 파일을 컴파일 당신은 당신의 평 파일

    if getattr(sys, 'frozen', False): 
        # if you are running in a |PyInstaller| bundle 
        extDataDir = sys._MEIPASS 
        extDataDir = os.path.join(extDataDir, 'Store_Codes.csv') 
        #you should use extDataDir as the path to your file Store_Codes.csv file 
    else: 
        # we are running in a normal Python environment 
        extDataDir = os.getcwd() 
        extDataDir = os.path.join(extDataDir, 'Store_Codes.csv') 
        #you should use extDataDir as the path to your file Store_Codes.csv file 
    
  3. 에 추가해야합니다 datas=[('Store_Codes.csv', '.')],

  4. 를 추가합니다.

당신이이 OS에 해당하는 임시 폴더 위치에 임시 폴더를 생성 .exe을 시작 토론

. 폴더의 이름은 _MEIxxxxxx입니다. 여기서 xxxxxx는 임의의 숫자입니다. 스크립트를 실행하는 데 필요한 모든 파일이 있습니다. sys._MEIPASS은이 임시 폴더의 경로입니다.

datas=[('Store_Codes.csv', '.')]을 스펙 파일에 추가 할 때. 파일을 번들의 기본 폴더에 복사합니다. 유지하려는 경우에는 다음 코드에서 당신이

if getattr(sys, 'frozen', False): 
    # if you are running in a |PyInstaller| bundle 
    extDataDir = sys._MEIPASS 
    extDataDir = os.path.join(extDataDir,another_folder, 'Store_Codes.csv') 
    #you should use extDataDir as the path to your file Store_Codes.csv file 
else: 
    # we are running in a normal Python environment 
    extDataDir = os.getcwd() 
    extDataDir = os.path.join(extDataDir,another_folder 'Store_Codes.csv') 
    #you should use extDataDir as the path to your file Store_Codes.csv file 
당신이 쓴 나는 정확히 한
관련 문제