পাই 2 এক্সি - একক এক্সিকিউটেবল ফাইল উত্পন্ন করুন


141

আমি ভেবেছিলাম আমি শুনেছি পাইপেক্সে এটি করতে সক্ষম হয়েছিল তবে আমি কখনই এটি বের করতে পারি নি। কেউ কি সফলভাবে এটি করেছে? আমি কি আপনার সেটআপ.পি ফাইলটি দেখতে পাচ্ছি এবং আপনি কোন কমান্ড লাইনের বিকল্পগুলি ব্যবহার করেছেন?

মূলত আমি এটি আমাকে একটি একক এক্সিকিউটেবল ফাইল দেওয়ার কথা ভাবছি যা সম্ভবত / টেম্পে আনজিপ করে চলে এমন কিছু করে।


এটি কি পাইথন 3 বা অজগর 2 এর পরে সংস্করণগুলিতে প্রযোজ্য?
ভিনসেন্ট

উত্তর:


105

পাইআইনস্টলার কোনও নির্ভরতা ছাড়াই একটি একক। এক্স ফাইল তৈরি করবে; --onefileবিকল্পটি ব্যবহার করুন । এটি নির্বাহযোগ্য মধ্যে সমস্ত প্রয়োজনীয় ভাগ করা libs প্যাক করে এবং এটি চালানোর আগে তা আনপ্যাক করে, যেমনটি আপনি বর্ণনা করেছেন (EDIT: পাইপেক্সেও এই বৈশিষ্ট্য রয়েছে, মিন্টির উত্তর দেখুন )

আমি এসএনএন থেকে পাইআইনস্টলারের সংস্করণটি ব্যবহার করি, যেহেতু সর্বশেষ প্রকাশ (1.3) কিছুটা পুরানো। এটি এমন একটি অ্যাপ্লিকেশনটির জন্য সত্যই ভাল কাজ করছে যা পাইকিউটি, পাইকিউউটি, ন্যাপি, স্কিপি এবং আরও কিছুতে নির্ভর করে।


5
আমি পাই 2 ইক্সি পাই ইনস্টলারের চেয়ে অনেক বেশি ভাল কাজ করেছি, যখন আপনি ডিম ব্যবহার করছেন। মিন্টির উত্তর হ'ল সমাধান।
gbjbaanb

অনুগ্রহ করে নোট করুন যে সংস্করণ 1.4 অনুসারে পাই পাইস্টলার উইন্ডোজে পাইথন 2.6+ সমর্থন করে না
জোরিল

2
আমি এখন 1.5.1 সংস্করণ ব্যবহার করছি এবং এটি পাইথন ২.7.২ এর সাথে কাজ করে।
oob

1
আপনি যদি সংকলক প্রোগ্রামে কয়েকটি যুক্তি নির্দিষ্ট করে থাকেন তবে পাইপেক্সে এক্সিকিউটেবল একটি ফাইল তৈরি করতে পারে। পাইপেক্সে অনলাইনে একক ফাইল এক্সিকিউটেবলের জন্য একটি টিউটোরিয়াল রয়েছে।
ট্রেভরকির্কবি

2
উদ্দেশ্য দৃষ্টিভঙ্গি: আমি দেখতে পাচ্ছি না যে এটি কীভাবে গ্রহণযোগ্য উত্তর, কারণ এটি পাই 2 এক্সেক্স দিয়ে একটি একক এক্স ফাইল তৈরির প্রশ্নকে সম্বোধন করে না। (যাইহোক, এটি অবশ্যই একটি দরকারী উত্তর।)
জোনাথন কোমার

171

পাইপেক্স ব্যবহার করে এটি করার উপায়টি হল আপনার সেটআপ.পি ফাইলীতে বান্ডেল_ফায়ালস বিকল্পটি ব্যবহার করা। একটি একক ফাইলের জন্য আপনি bundle_files1 তে, compressedসত্যতে সেট করতে এবং কোনওটিতে জিপফিল বিকল্পটি সেট করতে চান। এইভাবে এটি সহজে বিতরণের জন্য একটি সংকুচিত ফাইল তৈরি করে।

এখানে পাইডেক্স সাইট থেকে সরাসরি উদ্ধৃত বান্ডেল_ফाइल বিকল্পের আরও সম্পূর্ণ বিবরণ দেওয়া আছে *

"বান্ডেল_ফায়ালস" এবং "জিপ ফাইল" ব্যবহার করা হচ্ছে

একক-ফাইল এক্সিকিউটেবলগুলি তৈরি করার একটি সহজ (এবং আরও ভাল) উপায় হ'ল বান্ডেল_ফায়ালগুলি 1 বা 2 তে সেট করা এবং জিপফাইলে কোনওটিতে সেট করা না। এই পদ্ধতির জন্য অস্থায়ী স্থানে ফাইলগুলি তোলার প্রয়োজন হয় না, যা প্রোগ্রামের আরও দ্রুত প্রারম্ভিক সরবরাহ করে।

বান্ডেল_ফাইলেসের জন্য বৈধ মানগুলি হ'ল:

  • 3 (ডিফল্ট) বান্ডিল করবেন না
  • পাইথন দোভাষী ছাড়াও সমস্ত কিছু বান্ডিল করুন
  • পাইথন ইন্টারপ্রেটার সহ 1 টি বান্ডিল করুন

যদি জিপফাইলে কোনওটিতে সেট করা থাকে তবে ফাইলগুলি গ্রন্থাগার.জিপের পরিবর্তে এক্সিকিউটেবলের মধ্যেই বান্ডিল হবে।

এখানে একটি নমুনা সেটআপ.পি:

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,
)

5
নিশ্চিত হয়ে নিন যে আপনি যদি কেবলমাত্র দোভাষী অনুবাদককেই বান্ডেল না করে থাকেন তবে বান্ডেল_ফায়ালস বিকল্পের জন্য 2 টি চয়ন করুন। শুভকামনা!
পুদিনা

13
দয়া করে নোট করুন যে bundle_files 1 amd64 এ সমর্থন করে না (পাইথেক্স 0.6.9 পাইথন 2.6 এর জন্য কমপক্ষে)
জোরিল

2
@ প্যাট: পাইটেক্স চালানোর জন্য কলটি "পাইথন সেটআপ.পি পাইপেক্স 2"। শেষে স্বয়ংক্রিয়ভাবে "পাইপেক্সে" যুক্ত করে, এর অর্থ কেবল কমান্ড লাইনে আপনাকে এটি টাইপ করতে হবে না।
orlade

2
মাইক্রোসফ্ট ভিজ্যুয়াল সি রানটাইম ডিএলএল ইনস্টল করতে আপনার প্রয়োজন হিসাবে একক কার্যকর কার্যকর নয় ।
কেভিন স্মিথ

2
আমার কাছে একটি কনসোল অ্যাপ্লিকেশন ছিল যা আমি একক এক্সিকিউটেবল হিসাবে পেতে চাই। আমি প্রতিস্থাপন করতে ছিল windows = [{'script': "single.py"}]সঙ্গে console = ['single.py']ফাইল তাই দুবার ক্লিক উইন্ডোজে একটি সিএমডি উইন্ডোতে না খোলা পর্যন্ত যাবে।
জেফ বি

13

অন্যান্য পোস্টার উল্লেখ হিসাবে, পাইপেক্স, একটি এক্সিকিউটেবল + লোড করার জন্য কিছু গ্রন্থাগার তৈরি করবে। আপনার প্রোগ্রামে যুক্ত করতে আপনারও কিছু ডেটা থাকতে পারে।

পরবর্তী পদক্ষেপটি হ'ল একটি ইনস্টলার ব্যবহার করা, এটি সহজেই ব্যবহারযোগ্য সহজে ইনস্টলযোগ্য / অবিচ্ছেদ্য প্রোগ্রামে প্যাকেজ করা।

আমি বেশ কয়েক বছর ধরে এবং বাণিজ্যিক প্রোগ্রামগুলির জন্য আনন্দের সাথে ইনোসেটআপ ( http://www.jrsoftware.org/isinfo.php ) ব্যবহার করেছি , তাই আমি আন্তরিকভাবে এটির প্রস্তাব দিচ্ছি।


পাই-এক্সেক্সের পরে এখনও প্যাকেজ করার মতো জিনিস রয়েছে তা বোঝাতে +1
জোয়াকুইন

6

আমি এক্সিকে এম্বেড থাকা সমস্ত সংস্থান সহ একটি একক এক্স ফাইল তৈরি করতে সক্ষম হয়েছি। আমি উইন্ডোতে বিল্ডিং করছি। যাতে ওএস.সিস্টেম কলগুলি আমি ব্যবহার করছি তার কিছু ব্যাখ্যা করবে।

প্রথমে আমি আমার সমস্ত চিত্রগুলি বিটমেটে এবং তারপরে আমার সমস্ত ডেটা ফাইলকে টেক্সট স্ট্রিংয়ে রূপান্তরিত করার চেষ্টা করেছি। তবে এটি চূড়ান্ত এক্সকে খুব বড় করে তোলে।

এক সপ্তাহ গুগল করার পরে আমি বুঝতে পারি কীভাবে আমার চাহিদা মেটাতে পাইপেক্স এক্স্রি স্ক্রিপ্ট পরিবর্তন করতে হবে।

আমি জমা দেওয়া সোর্সফোরেজের প্যাচ লিঙ্কটি এখানে, মন্তব্য পোস্ট করুন যাতে আমরা এটি পরবর্তী বিতরণে অন্তর্ভুক্ত করতে পারি।

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

এটি করা সমস্ত পরিবর্তন ব্যাখ্যা করে, আমি কেবল সেটআপ লাইনে একটি নতুন বিকল্প যুক্ত করেছি। এখানে আমার সেটআপ.পি।

আমি এটিকে যথাসাধ্য মন্তব্য করার চেষ্টা করব। দয়া করে জেনে রাখুন যে আমার সেটআপ.পি ফাইল-নাম দিয়ে ছবিগুলিতে অ্যাক্সেস করছি তা করতে জটিল complex সুতরাং তাদের ট্র্যাক রাখতে আমার অবশ্যই একটি তালিকা সঞ্চয় করতে হবে।

এটি আমি চেয়েছি এমন একটি স্ক্রিন সেভার থেকে এসেছি।

আমি রানের সময় আমার সেটআপটি তৈরি করতে এক্সেক ব্যবহার করি, এর মতো কাটা এবং আটকানো সহজ।

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])

ভাঙ্গন

স্ক্রিপ্ট = পাই স্ক্রিপ্ট আমি একটি এক্সে যেতে চাই

আইকন_সোর্সগুলি = এক্সির জন্য আইকন

ফাইল_সোর্সগুলি = ফাইলগুলি আমি উদাহরণের মধ্যে এম্বেড করতে চাই

অন্যান্য_সোর্সগুলি = এক্সিকে এম্বেড করার জন্য একটি স্ট্রিং, এই ক্ষেত্রে একটি ফাইল তালিকা।

অপশন = পাই 2 এক্স এক্স বিকল্পগুলিকে এক এক্সাই ফাইলে তৈরি করার জন্য

বিটম্যাপ_স্ট্রিংস = অন্তর্ভুক্ত করা ফাইলগুলির একটি তালিকা

দয়া করে নোট করুন যে উপরের লিঙ্কে বর্ণিত হিসাবে আপনি নিজের পাইপেক্সেক্স.পি ফাইলটি সম্পাদনা না করা পর্যন্ত ফাইল_সোর্সগুলি কোনও বৈধ বিকল্প নয়।

প্রথমবার আমি এই সাইটে কোড পোস্ট করার চেষ্টা করেছি, যদি আমার এটি ভুল হয়ে যায় তবে আমাকে শিখাবেন না।

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"

ঠিক আছে, সেটআপের জন্য এটি চালিয়েছে py আমি পাইপেক্স না রেখে এই অ্যাপটি বিকাশ করেছি এবং পরে এটি যুক্ত করেছি। সুতরাং আপনি উভয় পরিস্থিতিতে অ্যাক্সেস দেখতে পাবেন। যদি চিত্র ফোল্ডারটি খুঁজে পাওয়া যায় না তবে এটি এক্সে সংস্থানগুলি থেকে চিত্রগুলি টানতে চেষ্টা করে। কোড এটি ব্যাখ্যা করবে। এটি আমার স্প্রাইট শ্রেণীর অংশ এবং এটি একটি ডাইরেক্টেক্স ব্যবহার করে। তবে আপনি যে কোনও এপিআই ব্যবহার করতে পারেন বা কেবল কাঁচা ডেটা অ্যাক্সেস করতে পারেন। কিছু যায় আসে না।

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!")

যে কোনও প্রশ্ন জিজ্ঞাসা বিনামূল্যে।


আমি আপনার পদ্ধতিটি চেষ্টা করেছি এবং এটি ভাল কাজ করে তবে আমি ফাইলকে কীভাবে এক্সেক্সে এমবেল করতে ফাইল_রেসুরসে বিকল্প যুক্ত করতে পারি তা বোঝা যায় না। আপনি যেমনটি বলেছেন ঠিক তেমন বিল্ট_এক্স.পি.পি ফাইলটি আমি সংশোধন করেছি তবে আমি যখন সেটআপ.পি ফাইলে যাই এবং লিখি \'file_resources': [('txt2.txt')]তখন এটি আমাকে ত্রুটি দেয় (যে ফাইলটি আমি আমার .exe এ এমবেল করতে চাইছি তার নাম txt2 এবং এটি একটি টেক্সট ফাইল) )
ভিনসলম্বা

আপনি কীভাবে আপনার সমস্ত চিত্রগুলি বিটমেটে এবং তারপরে আপনার সমস্ত ডেটা ফাইলকে টেক্সট স্ট্রিংয়ে রূপান্তর করেছেন সে সম্পর্কে কথা বলেছেন। যদিও আপনি বলেছিলেন যে এটি সর্বাধিক বড় করে তোলে, এটি কি এই কাজ করে এবং যদি তাই হয় তবে আপনি কীভাবে এটি করতে পারেন আমাকে বলতে পারেন? আমি জানি এই উত্তরটি বেশ পুরানো তবে আপনি যদি উত্তর দিতে পারেন তবে তা প্রশংসিত হবে।
পেপ্পা

4

আপনার পূর্বে উল্লিখিত হিসাবে একটি ইনস্টলার তৈরি করা উচিত। যদিও py2exe বান্ডেল_ফায়ার্স বিকল্প 1 এবং জাইফাইল কীওয়ার্ড আর্গুমেন্টকে কোনওটিতে সেট করে একক এক্সিকিউটেবলের মধ্যে সমস্ত কিছু বান্ডিল করা সম্ভব, আমি পাইগটি কে অ্যাপ্লিকেশনগুলির জন্য এটির প্রস্তাব দিই না।

এটি কারণ যে জিটিকে + এটি যে ডিরেক্টরি থেকে লোড করা হয়েছিল সেখান থেকে এটির ডেটা ফাইলগুলি (স্থানীয়, থিম ইত্যাদি) লোড করার চেষ্টা করে। সুতরাং আপনাকে নিশ্চিত করতে হবে যে আপনার এক্সিকিউটেবলের ডিরেক্টরিতে আপনার জিটিকে + ইনস্টলেশন থেকে জিটিকে + ব্যবহার করা লাইব্রেরি এবং ডিরেক্টরিগুলি লাইব, শেয়ার এবং ইত্যাদি অন্তর্ভুক্ত রয়েছে। অন্যথায় আপনি এমন কোনও মেশিনে আপনার অ্যাপ্লিকেশনটি চালাতে সমস্যা পাবেন যেখানে জিটিকে + সিস্টেম-ওয়াইড ইনস্টলড নেই।

আরও তথ্যের জন্য পাইজটি কে অ্যাপ্লিকেশনগুলির জন্য পাইপেক্সে আমার গাইড পড়ুন । এটি কীভাবে সমস্ত কিছু বান্ডিল করতে হয় তাও ব্যাখ্যা করে তবে জিটিকে +।


1

আমাকে বলা হয়েছে বিবিফ্রিজে একটি একক ফাইল তৈরি করতে হবে।


3
আমি যতদূর বুঝতে পারি বিবিফ্রিজে সিঙ্গল-ফাইল এক্সিকিউটেবল উত্পাদন করে না। আপনি আপনার উত্তর নথি করতে পারেন?
joaquin

-1

সি_এক্স ফ্রিজ চেষ্টা করুন এটি একটি ভাল স্ট্যান্ডেলোন তৈরি করতে পারে


সিএক্স_ফ্রিজে নির্বাহযোগ্য একটি স্ট্যান্ডেলোন তৈরি করতে পারে না, প্রকৃতপক্ষে বিল্টমিডিয়া.ড্রেডহেডসকস.আর / মিডিয়া / পিডিএফ / সিএক্স- ফ্রিজে / লেটস্ট /… এ cx_Freeze এর জন্য ডকুমেন্টেশন বলে, "cx_Freeze একক ফাইল এক্সেটিং সমর্থন করে না, যেখানে সমস্ত আপনার অ্যাপ্লিকেশনটির জন্য গ্রন্থাগারগুলি একটি এক্সিকিউটেবল ফাইলে এম্বেড করা আছে। " সিএক্স_ফ্রিজে স্ট্যান্ড স্টোন এক্সিকিউটেবল সম্পর্কে আরও তথ্যের জন্য ডকুমেন্টেশন ( বিল্টমিডিয়া.ড্রেডহেডসস.আর। / মিডিয়া / পিডিএফ / সিএক্স-ফ্রিজে / স্লেস্ট/… ) এ যান এবং বিভাগ section.৪ এ যান।
পেপাপা

-2

রিভিউবোর্ডে পর্যালোচনা প্রেরণের জন্য পোস্ট-রিভিউয়ের জন্য এক্সিকিউটেবল তৈরি করতে আমি সম্প্রতি পাইপেক্স ব্যবহার করেছি।

এটি ছিল সেটআপ.পি

from distutils.core import setup
import py2exe

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

এটি এক্সাই ফাইল এবং লাইব্রেরিগুলি সহ একটি ডিরেক্টরি তৈরি করেছে। আমি মনে করি না যে কেবলমাত্র একটি একা .exe ফাইল পেতে পাইপেক্স ব্যবহার করা সম্ভব। আপনার যদি প্রয়োজন হয় তবে আপনাকে প্রথমে পাইপেক্স ব্যবহার করতে হবে এবং তারপরে চূড়ান্ত সম্পাদনযোগ্য করার জন্য কিছু ফর্ম ইনস্টলার ব্যবহার করতে হবে।

একটি জিনিস খেয়াল রাখতে হবে তা হল আপনার অ্যাপ্লিকেশনটিতে আপনি যে কোনও ডিমের ফাইল ব্যবহার করেন তা আনজিপ করা দরকার, অন্যথায় পাইপেক্স এগুলি অন্তর্ভুক্ত করতে পারে না। এটি পাইপেক্স এক্স ডক্সে আচ্ছাদিত।


-6

না, এটি আপনাকে একমাত্র এক্সিকিউটেবল এই অর্থে দেয় না যে পরে আপনার কেবল একটি ফাইল রয়েছে - তবে আপনার একটি ডিরেক্টরি রয়েছে যা একটি এক্স ফাইল সহ আপনার প্রোগ্রাম চালানোর জন্য আপনার প্রয়োজনীয় সমস্ত কিছু রয়েছে।

আমি আজই এই সেটআপ.পিটি লিখেছি । আপনি কেবল প্রার্থনা করা প্রয়োজন python setup.py py2exe


1
এটি সঠিক নয়। সঠিক বিকল্পগুলির সাহায্যে আপনি একটি পৃথক ফাইল পেতে পারেন।
ট্রেভরকির্কবি

@ টার্স্টেন মারেক ... আপনার সেটআপ.পি-র লিঙ্কটি মারা গেছে। বিশেষত .. প্রথম দুটি বাণিজ্যিক সামগ্রীর প্রচার শেষ করে rede তৃতীয়বার এটি এখানে ইন্টারনেটের ডেড-এন্ডে শেষ হয়।
ZF007
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.