मैं exe में एम्बेड किए गए सभी संसाधनों के साथ एक एकल exe फ़ाइल बनाने में सक्षम रहा हूँ। मैं खिड़कियों पर निर्माण कर रहा हूं। ताकि कुछ os.system कॉल्स का उपयोग करके समझाऊंगा।
पहले मैंने अपनी सभी छवियों को बिटमैट्स में बदलने की कोशिश की और फिर अपने सभी डेटा फ़ाइलों को टेक्स्ट स्ट्रिंग्स में बदल दिया। लेकिन इससे अंतिम निर्वासन बहुत बड़ा हो गया।
एक हफ्ते के लिए Googleing के बाद मुझे पता चला कि मेरी ज़रूरतों को पूरा करने के लिए py2.exe स्क्रिप्ट को कैसे बदलना है।
यहाँ प्रस्तुत स्रोत पर पैच लिंक है, कृपया टिप्पणी पोस्ट करें ताकि हम इसे अगले वितरण में शामिल कर सकें।
http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583
यह किए गए सभी परिवर्तनों की व्याख्या करता है, मैंने बस सेटअप लाइन में एक नया विकल्प जोड़ा है। यहाँ मेरा setup.py है।
मैं इसे सबसे अच्छा मैं कर सकता हूँ के रूप में टिप्पणी करने की कोशिश करेंगे। कृपया जान लें कि मेरा setup.py जटिल है कि मैं फ़ाइल नाम से छवियों का उपयोग कर रहा हूँ। इसलिए मुझे उन पर नज़र रखने के लिए एक सूची संग्रहीत करनी चाहिए।
यह एक टू-बी स्क्रीन सेवर है जिसे मैं बनाने की कोशिश कर रहा था।
मैं अपने सेटअप को रन टाइम पर जेनरेट करने के लिए इस्तेमाल करता हूं, इसके कट को आसान और इस तरह पेस्ट करना।
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_resources = exe के लिए आइकन
file_resources = फाइलें जो मैं exe में एम्बेड करना चाहता हूं
other_resource = exe में एम्बेड करने के लिए एक स्ट्रिंग, इस मामले में एक फ़ाइल सूची।
विकल्प = एक exe फ़ाइल में सब कुछ बनाने के लिए py2exe विकल्प
बिटमैप_स्ट्रिंग्स = शामिल करने के लिए फ़ाइलों की एक सूची
कृपया ध्यान दें कि फ़ाइल_स्रोत एक वैध विकल्प नहीं है जब तक कि आप अपनी py2exe.py फ़ाइल को संपादित नहीं करते जैसा कि ऊपर दिए गए लिंक में बताया गया है।
पहली बार मैंने इस साइट पर कोड पोस्ट करने की कोशिश की है, अगर मुझे यह गलत लगता है तो मुझे लौ न दें।
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"
ठीक है, अब इसे सेटअप के लिए तैयार कर दिया है। मैंने इस ऐप को बिना py2exe को ध्यान में रखते हुए विकसित किया और बाद में इसे जोड़ा। तो आप दोनों स्थितियों के लिए पहुँच देखेंगे। अगर छवि फ़ोल्डर नहीं मिल सकता है तो यह एक्सई संसाधनों से छवियों को खींचने की कोशिश करता है। कोड इसे समझाएगा। यह मेरे स्प्राइट क्लास का हिस्सा है और यह एक डायरेक्टेक्स का उपयोग करता है। लेकिन आप अपनी इच्छानुसार किसी भी एपीआई का उपयोग कर सकते हैं या केवल कच्चे डेटा का उपयोग कर सकते हैं। कोई बात नहीं।
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!")
कोई भी प्रश्न पूछने के लिए स्वतंत्र हो गया।