programing

py2exe - 단일 실행 파일 생성

stoneblock 2023. 7. 18. 21:29

py2exe - 단일 실행 파일 생성

저는 py2exe가 이것을 할 수 있다고 들은 줄 알았는데, 전혀 몰랐습니다.이 일을 성공적으로 한 사람이 있습니까?setup.py 파일과 사용한 명령줄 옵션을 볼 수 있습니까?

기본적으로 /temp에서 압축을 풀고 실행하는 단일 실행 파일을 제공할 생각입니다.

를 사용하여 이 .pyfile.py2exe 입니다. setup.py 파일의 bundle_files 옵션은 과 같습니다. 단일파대설정수할해에일을 할 수 .bundle_files1까지,compressed참으로 설정하고 zipfile 옵션을 없음으로 설정합니다.이렇게 하면 쉽게 배포할 수 있도록 하나의 압축 파일이 만들어집니다.

다음은 py2exe 사이트에서 직접 인용한 bundle_file 옵션에 대한 자세한 설명입니다.*

"bundle_files" 및 "zipfile" 사용

단일 파일 실행 파일을 만드는 더 쉬운 방법은 bundle_files를 1 또는 2로 설정하고 zipfile을 없음으로 설정하는 것입니다.이 방법은 임시 위치로 파일을 추출할 필요가 없으므로 프로그램을 훨씬 빨리 시작할 수 있습니다.

bundle_files의 유효한 값은 다음과 같습니다.

  • 3(기본값) 번들 안 함
  • Python 인터프리터를 제외한 모든 것을 번들 2개
  • Python 인터프리터를 포함한 모든 것 1개 번들

zipfile을 None으로 설정하면 파일이 library.zip 대신 실행 파일 내에 번들됩니다.

다음은 설정 예입니다.py:

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
    windows = [{'script': "single.py"}],
    zipfile = None,
)

PyInstaller는 종속성이 없는 단일 .exe 파일을 만듭니다.--onefile선택.이는 필요한 모든 공유 립을 실행 파일에 넣고 실행하기 전에 압축을 푸는 방식으로 수행됩니다(편집: py2exe에도 이 기능이 있습니다. minty의 답변 참조).

최신 버전(1.3)이 다소 구식이기 때문에 저는 svn의 PyInstaller 버전을 사용합니다.PyQt, PyQwt, numpy, scipy 등에 의존하는 앱에서 매우 잘 작동하고 있습니다.

했듯이, 다른포스언듯이급했가터,이듯▁as▁mention▁the언했,py2exe로드할 실행 파일 + 일부 라이브러리를 생성합니다.프로그램에 추가할 데이터를 얻을 수도 있습니다.

다음 단계는 설치 프로그램을 사용하여 이 모든 것을 하나의 설치/제거하기 쉬운 프로그램으로 패키지화하는 것입니다.

저는 InnoSetup을 몇 년 동안 즐겁게 사용했고 광고 프로그램에도 사용했기 때문에 진심으로 추천합니다.

모든 리소스가 exe에 포함된 단일 exe 파일을 만들 수 있었습니다.저는 창문 위에 건물을 짓고 있습니다.그래서 그것은 제가 사용하고 있는 OS.시스템 호출 중 일부를 설명할 것입니다.

먼저 모든 이미지를 비트맵으로 변환한 다음 모든 데이터 파일을 텍스트 문자열로 변환하려고 했습니다.하지만 이것이 최종 실행을 매우 크게 만들었습니다.

일주일 동안 구글을 검색한 후에 나는 내 필요에 맞게 py2exe 스크립트를 변경하는 방법을 알아냈습니다.

여기 제가 제출한 소스포지에 대한 패치 링크입니다. 다음 배포에 포함될 수 있도록 댓글을 달아주세요.

http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583

이것은 모든 변경 사항을 설명합니다. 저는 설정 라인에 새로운 옵션을 추가했을 뿐입니다.여기 제 setup.py 이 있습니다.

제가 할 수 있는 한 그것에 대해 언급하도록 하겠습니다.제 setup.py 은 파일 이름으로 이미지에 액세스하는 것과 복잡하다는 것을 알아두시기 바랍니다.그래서 나는 그들을 추적하기 위해 목록을 저장해야 합니다.

이것은 제가 만들려고 했던 want to b 화면 보호기에서 온 것입니다.

실행 시 exec을 사용하여 설정을 생성합니다. 이렇게 자르고 붙여넣기가 더 쉽습니다.

exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\
      'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\
      options={'py2exe': py2exe_options},\
      zipfile = None )" % (bitmap_string[:-1])

고장난

스크립트 = py 스크립트 exe로 전환합니다.

icon_message = exe의 아이콘

file_message = exe에 포함할 파일

other_message = exe에 포함할 문자열(이 경우 파일 목록).

옵션 = py2exe모든 항목을 하나의 exe 파일로 생성하는 옵션

bitmap_message = 포함할 파일 목록

위 링크에 설명된 대로 py2exe.py 파일을 편집하기 전까지는 file_dll이 유효한 옵션이 아닙니다.

제가 이 사이트에 코드를 처음 게시하려고 시도했을 때, 제가 잘못 알았다면 저를 비난하지 마세요.

from distutils.core import setup
import py2exe #@UnusedImport
import os

#delete the old build drive
os.system("rmdir /s /q dist")

#setup my option for single file output
py2exe_options = dict( ascii=True,  # Exclude encodings
                       excludes=['_ssl',  # Exclude _ssl
                                 'pyreadline', 'difflib', 'doctest', 'locale',
                                 'optparse', 'pickle', 'calendar', 'pbd', 'unittest', 'inspect'],  # Exclude standard library
                       dll_excludes=['msvcr71.dll', 'w9xpopen.exe',
                                     'API-MS-Win-Core-LocalRegistry-L1-1-0.dll',
                                     'API-MS-Win-Core-ProcessThreads-L1-1-0.dll',
                                     'API-MS-Win-Security-Base-L1-1-0.dll',
                                     'KERNELBASE.dll',
                                     'POWRPROF.dll',
                                     ],
                       #compressed=None,  # Compress library.zip
                       bundle_files = 1,
                       optimize = 2                        
                       )

#storage for the images
bitmap_string = '' 
resource_string = ''
index = 0

print "compile image list"                          

for image_name in os.listdir('images/'):
    if image_name.endswith('.jpg'):
        bitmap_string += "( " + str(index+1) + "," + "'" + 'images/' + image_name + "'),"
        resource_string += image_name + " "
        index += 1

print "Starting build\n"

exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\
      'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\
      options={'py2exe': py2exe_options},\
      zipfile = None )" % (bitmap_string[:-1])

print "Removing Trash"
os.system("rmdir /s /q build")
os.system("del /q *.pyc")
print "Build Complete"

좋아요, 이제 setup.py 를 마치겠습니다. 마법은 이미지에 접근해야 했습니다.저는 py2exe 없이 이 앱을 개발하고 나중에 추가했습니다.두 상황 모두에 대한 액세스 권한이 표시됩니다. 이미지 폴더를 찾을 수 없으면 exe 리소스에서 이미지를 가져오려고 합니다.코드는 그것을 설명할 것입니다. 이것은 내 스프라이트 클래스의 일부이고 그것은 directx를 사용합니다. 하지만 당신은 당신이 원하는 어떤 api를 사용하거나 그냥 원시 데이터에 액세스할 수 있습니다. 문제가 되지 않습니다.

def init(self):
    frame = self.env.frame
    use_resource_builtin = True
    if os.path.isdir(SPRITES_FOLDER):
        use_resource_builtin = False
    else:
        image_list = LoadResource(0, u'INDEX', 1).split(' ')

    for (model, file) in SPRITES.items():
        texture = POINTER(IDirect3DTexture9)()
        if use_resource_builtin: 
            data = LoadResource(0, win32con.RT_RCDATA, image_list.index(file)+1) #windll.kernel32.FindResourceW(hmod,typersc,idrsc)               
            d3dxdll.D3DXCreateTextureFromFileInMemory(frame.device,   #Pointer to an IDirect3DDevice9 interface
                                              data,                #Pointer to the file in memory
                                              len(data),           #Size of the file in memory
                                              byref(texture))      #ppTexture
        else:
            d3dxdll.D3DXCreateTextureFromFileA(frame.device, #@UndefinedVariable
                                               SPRITES_FOLDER + file,
                                               byref(texture))            
        self.model_sprites[model] = texture
    #else:
    #    raise Exception("'sprites' folder is not present!")

어떤 질문이든 자유롭게 할 수 있습니다.

앞에서 언급한 대로 설치 프로그램을 생성해야 합니다.bundle_files 옵션을 1로 설정하고 zipfile 키워드 인수를 None으로 설정하여 py2exe가 모든 것을 단일 실행 파일로 번들하도록 할 수도 있지만, PyGTK 애플리케이션에는 권장하지 않습니다.

이는 GTK+가 로드된 디렉터리에서 데이터 파일(로컬, 테마 등)을 로드하려고 하기 때문입니다.따라서 실행 파일의 디렉터리에 GTK+에서 사용하는 라이브러리와 GTK+ 설치의 디렉터리 lib, share 등이 포함되어 있는지 확인해야 합니다.그렇지 않으면 GTK+가 시스템 전체에 설치되지 않은 컴퓨터에서 응용 프로그램을 실행하는 데 문제가 발생합니다.

자세한 내용은 PyGTK 애플리케이션용 py2exe 가이드를 참조하십시오.또한 GTK+를 제외한 모든 것을 번들하는 방법도 설명합니다.

는 bbfreeze가 py2exe보다 새로운 파일인 .EXE를 만들 것이라고 들었습니다.

저는 최근에 py2exe를 사용하여 리뷰 보드에 리뷰를 보내기 위한 사후 검토 실행 파일을 만들었습니다.

이것은 제가 사용했던 setup.py 입니다.

from distutils.core import setup
import py2exe

setup(console=['post-review'])

exe 파일과 필요한 라이브러리가 들어 있는 디렉터리를 만들었습니다.저는 py2exe를 사용하여 하나의 .exe 파일만 얻는 것은 불가능하다고 생각합니다.필요한 경우 먼저 py2exe를 사용한 다음 설치 프로그램의 일부 형식을 사용하여 최종 실행 파일을 만들어야 합니다.

한 가지 주의할 점은 응용 프로그램에서 사용하는 모든 에그 파일의 압축을 풀어야 한다는 것입니다. 그렇지 않으면 py2exe가 파일을 포함할 수 없습니다.이 내용은 py2exe 문서에서 다룹니다.

c_x 동결을 시도해보세요. 좋은 독립 실행형을 만들 수 있습니다.

언급URL : https://stackoverflow.com/questions/112698/py2exe-generate-single-executable-file