[pygame]exe화 [cx Freeze]

pygame→exe화


자주 추기하고 다시 쓰기 때문에 갱신 날짜가 가장 최근입니다.

개시하다


윈도우즈에서pygame를 사용한 프로그램이exe까지 걸어온 노정을 기록합니다.(2019/1월10일)
exe화에 관하여.py에서 사용하는 프로그램 라이브러리와exe화 방법 등의 호환성 때문에 순조롭게 진행되지 못할 때가 있습니다. 이번에는 우연한 기회일 수도 있습니다. 누군가를 도울 수 있다면 다행입니다.

배경.


python 파일의 실행 파일화는 주로pynstaller,py2exemcx-이다나는 프리즈의 세 개가 매우 유명하다고 생각한다.현재 글을 쓸 때pynstaller의 사용이 가장 간단하고 초보자 프로그래머를 대상으로 하는 글도pynstaller로 파일화의 절차를 설명한다.
Python 스크립트를 단일 실행 파일로 변환하는 방법
https://qiita.com/hirohiro77/items/466e411fa41f144c8b2a
pygame를 사용해도 상술한 보도에 따라 파일을 집행할 수 있는지 시험해 보았지만 순조롭게 진행되지 못했다.(러시아 네모난 블록을 만들었지만 친구에게 자랑할 수 없다!)
실행 파일을 생성하기 전에 순조롭게 진행되었으나, 실행 중 정지되었습니다.

하루 종일 꼬박 해결했다


pygame의exe화는 웃기는 보도가 있을 수 없습니다. 그럼에도 불구하고 구글을 통해 조사한 결과 결국 실행 파일을 만들었습니다.그러나 도중에 여러 군데의 장치가 있었는데 하루 만에 고장이 났다
같은 실수를 범하지 않기 위해 나는 이 글을 기록으로 만들었다. (다른 환경의 재현성에 대해 자신이 없다.

컨디션


windows7 : 32bit
conda : 4.5.12-py37_0
pip : 18.1
python : 3.6.6
cx_Freeze : 5.1.1
pygame : 1.9.4

절차.

  • cx_Freeze 설치
  • pygame 파일의 path 설정
  • setup.py의 제작
  • exe화
  • 단독 exe 파일화
  • bat 파일을 통한 자동화
  • pygame를 사용하지 않을 때의 포장


    일반적으로pynstaller를 사용합니다. 위에 올라온 사이트를 참조하십시오.

    1. cx_Freeze 설치


    cx_Freeze가 conda인 것을 찾을 수 없습니다. pip로 설치합니다.
    > pip install cx_Freeze --upgrade
    

    실행 결과

    ...(省略)...
    Successfully installed cx_Freeze-X.X.X
    >
    
    이게 뜨면 아마 제대로 설치할 수 있겠지

    2pygame 파일의 패스 설정


    여러분이pygame로 만든 게임은 상당히 간단한 게임이 아니라면 외부에서 이미지 파일을 읽어야 합니다.읽을 때 경로 처리에 주의해야 합니다

    불순한 예


    main.py
    # ...
    image = pygame.image.load('game1/image_file/image1.png')
    # ...
    
    처음에는 위의 예처럼 png 경로를 직접 넣었지만, 이렇게 하면 실행 파일을 시작할 때 pg 파일을 읽는 데 실패할 수 있습니다.
    os 모듈을 가져옵니다.getcwd () 형식으로 다시 쓰십시오.

    순조로운 예


    main.py
    
    # インポート文
    import os
    
    
    # メイン関数
    def main():
        #...
        image1_path = os.path.join(os.getcwd(), "python_images\\"+"image1.png")
        #...
        image1 = pygame.image.load(image1_path)
        #...
    
    추기 (2020년 7월 8일)
    pygame의 파일 위치에서 동적 절대 경로 만들기 이런 곳입니까

    3. setup.py 생성


    pygame 파일과 같은 층에 있습니다, setup.py를 생성합니다.이 파일에서exe의 생성 방법을 설정합니다.setup.py의 내용은 다음과 같다.
    setup.py
    
    import sys
    from cx_Freeze import setup, Executable
    
    base = None
    
    if sys.platform == "win32" : base = "Win32GUI"
    # CUIの場合はこのif文をコメントアウトしてください。
    
    exe = Executable(script = "main.py", base= base)
    # "main.py"にはpygameを用いて作成したファイルの名前を入れてください。
    
    setup(
        name = 'your_filename',
        version = '0.1', 
        description = 'converter',
        executables = [exe]
    )
    # 'your_filename'は好みの名前でどうぞ。
    
    이렇게 exe화 준비가 됐습니다.

    4.exe화


    pygeme,cx_freeze 환경에 들어가서 대상 파일의 바로 아래 디렉터리로 이동하고 다음 동작을 수행합니다
    > python setup.py bdist_msi
    
    pygame 파일의 구성에 따라 시간이 많이 걸릴 수 있습니다.
    pygame 파일의 같은 층에dist와build 폴더가 있어야 합니다.파일은build 폴더의exe입니다.win32-3.6 이 폴더 (환경 이름에 따라 다소 달라질 수 있습니다.)를 참고하십시오.안에 있는 물건을 파괴하지 않도록 주의하세요
    ※ 여기서 실행 파일을 시작해도 png의pygame 파일로는 png을 읽을 수 없습니다.1.5단계의 "ptyhon image"+ "image1.png"부분(예를 들어python images 폴더),exe.win32-3.6 내에 복사해 주세요.

    5. 파일화


    NSIS라는 소프트웨어를 사용하면 cxFreeze(py2exe)에서도 1개의 파일화를 수행할 수 있습니다.pygame 파일의 바로 옆면에 NSIS를 설치합니다. setup.nsi를 만들고 그 안에 파일화된 설정 하나를 쓴다.
    상세한 설명은 아래 사이트를 참조하시오.
    (참조)http://fanblogs.jp/mountain4101/archive/59/0
    도중에 차를 타다.exe의 path를 통과해야 합니다. 각자 아래 사이트를 참조하십시오.
    (참조)http://realize.jounin.jp/path.html

    예제


    setup.nsi
    !define cx_fleezeOutputDir 'build\exe.win32-3.6'
    !define exe 'game.exe'
    ;!define comressor 'lzma' ;one of'zlib', 'bzip2', 'lzma'
    !define onlyOneInstance
    !include FileFunc.nsh
    !insertmacro GetParameters
    
    ; - - - - do not edit below this line, normaly - - - -
    !ifdef compressor
        SetCompressor ${compressor}
    !else
        SetCompress Off
    !endif
    Name ${exe}
    OutFile ${exe}
    SilentInstall silent
    !ifdef icon
        Icon ${icon}
    !endif
    
    ; - - - - Allow only one installer instance - - - - 
    !ifdef onlyOneInstance
    Function .onInit
     System::Call "kernel32::CreateMutexA(i 0, i 0, t '$(^Name)') i .r0 ?e"
     Pop $0
     StrCmp $0 0 launch
      Abort
     launch:
    FunctionEnd
    !endif
    ; - - - - Allow only one installer instance - - - - 
    
    Section
    
        ; Get directory from which the exe was called
        System::Call "kernel32::GetCurrentDirectory(i ${NSIS_MAX_STRLEN}, t .r0)"
    
        ; Unzip into pluginsdir
        InitPluginsDir
        SetOutPath '$PLUGINSDIR'
        File /r '${cx_fleezeOutputDir}\*.*'
    
        ; Set working dir and execute, passing through commandline params
        SetOutPath '$0'
        ${GetParameters} $R0
        ExecWait '"$PLUGINSDIR\${exe}" $R0' $R2
        SetErrorLevel $R2
    
    SectionEnd
    
    첫줄
    'build\exe.win32-3.6'
    cxFreeze가 토출한 파일에 실행 파일이 포함된 폴더 경로를 입력합니다.각 환경에 따라 변경하십시오.

    6. 자동화


    bat와 cmd 지식은 없는 것과 같으니 참고하세요.
    명령 알림과 분석기 알림을 하나하나 시작합니다. 이동 디렉터리exe화는 매우 번거롭습니다.클릭만 하면pygame 파일exe화된bat 파일을 만들었습니다.
    이bat 파일을pygame 파일의 같은 층에 넣어서 실행하면 cxFreeze를 사용하여 exe화할 수 있습니다.(setup.py는 반드시 써야 합니다.)
    예제
    setup_cx_Freeze.bat
    @rem エコーを出力しない
    @echo off
    
    rem pygameファイルから実行ファイルを生成するBAT
    rem Minicondaの仮想環境'test'の中のcx_freezeを使用
    rem batファイルと同じディレクトリのsetup.pyファイルを使用。
    cd /d %~dp0
    
    
    if not exist "_TMP" (
    type nul > _TMP
    rem Anaconda promptを起動(call以下は各自任意のパスを指定してください)
    call C:\Users\user\Miniconda3\Scripts\activate.bat
    
    rem exe化用の仮想環境へ移動(任意の仮想環境名をactibateさせてください)
    activate test
    python setup.py bdist_msi
    pause
    del "_TMP"
    
    
    한편 NSIS 자동화 bat 파일은 4단계에서 참조한 웹 사이트에 게재됐다.
    setup_nsis.bat
    @rem エコーを出力しない
    @echo off
    
    rem Batのあるフォルダに移動し.pyファイルを実行するBAT
    rem 現在のフォルダに移動
    cd /d %~dp0
    
    makensis.exe setup.nsi
    
    pause
    
    exit
    
    setup_cx_Freeze.bat→setup_nsis.bat 순서대로 일괄 처리 파일을 시작하면exe를 생성할 수 있습니다.태어났어요?나의 환경에는 대량의exe아기가 있다.

    최후


    시간이 지났기 때문에 쓸모없는 쓰레기 기사가 될 수도 있어요. 당신의 보고서를 기대하고 있어요. 그러면 다시 쓰기가 일어나거나 기사가 사라질 수도 있어요.

    좋은 웹페이지 즐겨찾기