سؤال

ظننت أنني سمعت أن py2exe كان قادرا على القيام بذلك ، ولكن لم ترد عليها.وقد أي شخص بنجاح فعل هذا ؟ أستطيع أن أرى الخاص بك setup.py ملف, وما خيارات سطر الأوامر التي تستخدم ؟

أساسا أنا أفكر أنه يعطيني ملف تنفيذي واحد أن يفعل شيئا مثل unzips نفسها ربما /temp و يعمل.

هل كانت مفيدة؟

المحلول

PyInstaller سيتم إنشاء واحد .ملف exe مع أي تبعيات;استخدام --onefile خيار.وذلك من خلال التعبئة كل حاجة مشتركة يبس في القابل للتنفيذ و تفريغ عليها قبل تشغيله ، كما تصفون (تحرير:py2exe أيضا لديه هذه الميزة ، انظر منتي الجواب)

أنا استخدم الإصدار من PyInstaller من svn منذ الإصدار الأخير (1.3) هي قديمة نوعا ما.إنه يعمل بشكل جيد حقا على التطبيق الذي يعتمد على PyQt, PyQwt, numpy, scipy وعدد قليل من أكثر.

نصائح أخرى

طريقة للقيام بذلك باستخدام py2exe هو استخدام bundle_files الخيار في setup.py الملف.ملف واحد سوف ترغب في تعيين bundle_files إلى 1 ، compressed إلى True ، وتعيين zipfile الخيار إلى لا شيء.وبهذه الطريقة يخلق واحد ملف مضغوط لسهولة التوزيع.

هنا هو أكثر وصف كامل bundle_file الخيار نقلت مباشرة من py2exe الموقع*

باستخدام "bundle_files" و "عندما"

أسهل (أفضل) طريقة إنشاء ملف واحد التنفيذية لتعيين bundle_files إلى 1 أو 2 ، تعيين zipfile إلى لا شيء.هذا النهج لا لا تتطلب استخراج الملفات إلى الموقع المؤقت الذي ينص أسرع بكثير البرنامج عند بدء التشغيل.

القيم الصالحة من أجل bundle_files هي:

  • 3 (افتراضي) لا حزمة
  • 2 حزمة كل شيء ولكن مترجم بايثون
  • 1 حزمة كل شيء ، بما في ذلك مترجم بايثون

إذا عندما يتم تعيين إلى لا شيء ، ملفات حزمة داخل الملف القابل للتنفيذ بدلا من library.zip.

هنا عينة setup.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,
)

والآخر ملصق يذكر ، py2exe ، سوف تولد تنفيذي + بعض المكتبات لتحميل.هل يمكن أن يكون أيضا بعض البيانات إضافة إلى البرنامج الخاص بك.

الخطوة التالية هي استخدام المثبت, أن حزمة كل هذا في واحدة سهلة الاستخدام للتثبيت/unistallable البرنامج.

لقد استخدمت InnoSetup ( http://www.jrsoftware.org/isinfo.php ) مع فرحة لعدة سنوات و البرامج التجارية ، لذلك أوصى عليه.

يجب إنشاء المثبت, كما ذكر من قبل.على الرغم من أنه من الممكن أيضا أن السماح py2exe حزمة كل شيء في واحد قابل للتنفيذ ، من خلال وضع bundle_files الخيار 1 zipfile كلمات حجة إلى لا شيء, أنا لا أوصي هذا PyGTK التطبيقات.

ذلك لأن من GTK+ يحاول تحميل ملفات البيانات (المحليين, المواضيع, الخ.) من الدليل أنه كان تحميلها من.بحيث يكون لديك للتأكد من أن الدليل الخاص بك قابل للتنفيذ يحتوي أيضا على المكتبات تستخدم GTK+ و الدلائل ليب ، حصة وغيرها من التثبيت الخاص بك من GTK+.وإلا سوف تحصل مشاكل في تشغيل التطبيق الخاص بك على الجهاز حيث GTK+ لم يتم تثبيت على نطاق المنظومة.

لمزيد من التفاصيل اقرأ دليل py2exe على PyGTK التطبيقات.وهذا ما يفسر أيضا كيف أن حزمة كل شيء ، ولكن GTK+.

لقد كنت قادرا على إنشاء ملف exe واحد مع جميع الموارد embeded إلى exe.أنا بناء على نظام التشغيل ويندوز.بحيث سيتم شرح بعض من نظام التشغيل.نظام مكالمات أنا باستخدام.

أولا حاولت تحويل جميع الصور في bitmats ثم كل ما عندي من ملفات البيانات إلى سلاسل نصية.ولكن هذا تسبب في النهائي exe أن تكون كبيرة جدا جدا.

بعد googleing لمدة أسبوع اكتشفت كيفية تغيير py2exe النصي إلى تلبية احتياجات بلدي.

هنا هو تصحيح الرابط على سورس قدمت, الرجاء نشر التعليقات حتى نتمكن من إدراجها في التالي التوزيع.

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

هذا explanes كافة التغييرات التي تم إجراؤها ، لقد ببساطة إضافة خيار جديد إلى إعداد خط.هنا هو بلدي setup.py.

سأحاول التعليق على أنها أفضل ما يمكن.يرجى أن setup.py معقدة لا إلى حقيقة أن أنا الوصول إلى الصور قبل اسم الملف.لذا يجب تخزين قائمة لتتبع لهم.

هذا من want-to-b شاشة التوقف كنت في محاولة لجعل.

يمكنني استخدام exec لتوليد بلدي الإعداد في وقت التشغيل ، easyer إلى قص ولصق مثل ذلك.

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_resources = سلسلة إلى تضمين في exe, في هذه الحالة قائمة ملف.

الخيارات = py2exe خيارات خلق كل شيء في واحد ملف exe

bitmap_strings = قائمة من الملفات تشمل

يرجى ملاحظة أن file_resources ليس خيارا صالحا حتى تحرير الخاص بك 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"

حسنا, هذا كل شيء بالنسبة 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!")

أي أسئلة سقطت الحرة أن نسأل.

أنا قلت bbfreeze سيتم إنشاء ملف واحد .EXE و هو أحدث من py2exe.

محاولة c_x تجميد فإنه يمكن إنشاء قائمة بذاتها جيدة

كنت مؤخرا py2exe إلى إنشاء قابل للتنفيذ بعد استعراض إرسال التعليقات إلى ReviewBoard.

كان هذا setup.py اعتدت

from distutils.core import setup
import py2exe

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

خلقت الدليل الذي يحتوي على ملف exe و المكتبات اللازمة.أنا لا أعتقد أنه من الممكن استخدام py2exe للحصول على واحدة فقط .ملف exe.إذا كنت بحاجة إلى ذلك سوف تحتاج إلى أن أول استخدام py2exe ثم استخدام بعض شكل installer لجعل النهائي للتنفيذ.

شيء واحد أن تأخذ الرعاية من أي بيضة الملفات التي يمكنك استخدامها في التطبيق الخاص بك تحتاج إلى محلول ، وإلا py2exe لا يمكن إدراجها.ويغطي هذا py2exe مستندات.

لا, انها لا تعطيك واحد قابل للتنفيذ بمعنى أن لديك فقط ملف واحد بعد ذلك - ولكن لديك الدليل الذي يحتوي على كل ما تحتاجه لتشغيل البرنامج ، بما في ذلك ملف exe.

أنا فقط كتبت هذا setup.py اليوم.تحتاج فقط إلى الاحتجاج python setup.py py2exe.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top