Saya sudah bisa membuat file exe tunggal dengan semua sumber daya dimasukkan ke exe. Saya sedang membangun di jendela. jadi itu akan menjelaskan beberapa panggilan sistem. Saya menggunakan.
Pertama saya mencoba mengubah semua gambar saya menjadi bitmats dan kemudian semua file data saya menjadi string teks. tetapi ini menyebabkan exe terakhir menjadi sangat besar.
Setelah googleing selama seminggu saya menemukan cara mengubah skrip py2exe untuk memenuhi kebutuhan saya.
di sini adalah tautan tambalan pada sourceforge yang saya kirimkan, silakan kirim komentar sehingga kita bisa memasukkannya dalam distribusi berikutnya.
http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583
ini menjelaskan semua perubahan yang dilakukan, saya cukup menambahkan opsi baru ke baris setup. di sini adalah setup.py saya.
Saya akan mencoba berkomentar sebisa mungkin. Perlu diketahui bahwa setup.py saya rumit karena fakta bahwa saya mengakses gambar dengan nama file. jadi saya harus menyimpan daftar untuk melacaknya.
ini dari screen saver ingin-ke-b yang saya coba buat.
Saya menggunakan exec untuk menghasilkan setup saya pada saat run time, lebih mudah untuk memotong dan menempel seperti itu.
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])
kerusakan
script = py script saya ingin beralih ke exe
icon_resources = ikon untuk exe
file_resources = file yang ingin saya embed ke dalam exe
other_resources = string untuk dimasukkan ke exe, dalam hal ini daftar file.
options = opsi py2exe untuk membuat semuanya menjadi satu file exe
bitmap_strings = daftar file yang akan disertakan
Harap perhatikan bahwa file_resources bukan opsi yang valid sampai Anda mengedit file py2exe.py Anda seperti yang dijelaskan dalam tautan di atas.
pertama kali saya mencoba memposting kode di situs ini, jika saya salah jangan memecat saya.
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"
ok, itu saja untuk setup.py sekarang sihir diperlukan mengakses gambar. Saya mengembangkan aplikasi ini tanpa mengingat py2exe kemudian menambahkannya nanti. jadi Anda akan melihat akses untuk kedua situasi. jika folder gambar tidak dapat ditemukan mencoba menarik gambar dari sumber daya exe. kode akan menjelaskannya. ini adalah bagian dari kelas sprite saya dan menggunakan directx. tetapi Anda dapat menggunakan api apa pun yang Anda inginkan atau hanya mengakses data mentah. tidak masalah.
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!")
Setiap pertanyaan jatuh bebas untuk diajukan.