Ben exe gömülü tüm kaynakları ile tek bir exe dosyası oluşturmak mümkün. Pencereler üzerine inşa ediyorum. böylece kullandığım os.system çağrılarından bazılarını açıklayacağız.
Önce tüm görüntülerimi bitmatlara, sonra da tüm veri dosyalarımı metin dizelerine dönüştürmeyi denedim. ancak bu son exe'nin çok büyük olmasına neden oldu.
Bir hafta boyunca googleing sonra nasıl benim ihtiyaçlarını karşılamak için py2exe komut dosyası değiştirmek anladım.
Gönderdiğim sourceforge'daki yama bağlantısı, lütfen bir sonraki dağıtımda yer alabilmemiz için yorum gönderin.
http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583
Bu yapılan tüm değişiklikleri açıklıyor, ben sadece kurulum hattına yeni bir seçenek ekledim. İşte benim setup.py.
Ben elimden gelenin en iyisini yorum yapmaya çalışacağım. Setup.py dosyamın görüntülere dosya adına eriştiğim için karmaşık olduğunu lütfen unutmayın. bu yüzden onları takip etmek için bir liste saklamalıyım.
Bu yapmaya çalıştığım bir ekran koruyucu.
Kurulumumu çalışma zamanında oluşturmak için exec kullanıyorum, bu şekilde kesip yapıştırmak daha kolay.
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])
Yıkmak
script = py script bir exe açmak istiyorum
icon_resources = exe simgesi
file_resources = exe'ye yerleştirmek istediğim dosyalar
other_resources = exe'ye gömülecek bir dize, bu durumda bir dosya listesi.
options = py2exe her şeyi bir exe dosyasına oluşturmak için seçenekler
bitmap_strings = dahil edilecek dosyaların listesi
Lütfen yukarıdaki linkte açıklandığı gibi py2exe.py dosyanızı düzenleyene kadar file_resources'nin geçerli bir seçenek olmadığını unutmayın.
ilk kez ben bu sitede kod göndermeye çalıştım, eğer yanlış alırsanız beni alev yok.
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"
tamam, bu kurulum için t.py şimdi sihirli görüntüler erişmek gerekiyordu. Aklımda py2exe olmadan bu uygulamayı geliştirdikten sonra daha sonra ekledi. böylece her iki durum için de erişim görürsünüz. resim klasörü bulunamazsa, görüntüleri exe kaynaklarından almaya çalışır. kod açıklayacaktır. bu benim sprite sınıfımın bir parçası ve bir directx kullanıyor. ancak istediğiniz herhangi bir API'yi kullanabilir veya yalnızca ham verilere erişebilirsiniz. önemli değil.
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!")
Herhangi bir soru sormaktan çekinmeyin.