চিত্র এবং শব্দ এবং আমার নিজের গবেষণা / পরীক্ষার মতো অতিরিক্ত ডেটা ফাইল যুক্ত করার বিষয়ে ম্যাক্স এবং এই পোস্টের দুর্দান্ত উত্তরটি ব্যবহার করে , আমি বিশ্বাস করি যে এই জাতীয় ফাইলগুলি যুক্ত করার সবচেয়ে সহজ উপায় আমি কী বিশ্বাস করি।
আপনি যদি কোনও জীবন্ত উদাহরণ দেখতে চান তবে আমার সংগ্রহশালাটি এখানে গিটহাবটিতে রয়েছে।
নোট: এই ব্যবহার সংকলন জন্য --onefile
বা -F
pyinstaller সঙ্গে কমান্ড।
আমার পরিবেশটি নিম্নরূপ।
2 টি পদক্ষেপে সমস্যা সমাধান করা
সমস্যাটি সমাধান করার জন্য আমাদের পিনস্টলারের কাছে বিশেষভাবে বলতে হবে যে আমাদের কাছে অতিরিক্ত ফাইল রয়েছে যা অ্যাপ্লিকেশনটির সাথে "বান্ডিল" করা দরকার।
আমাদের একটি 'আপেক্ষিক' পথও ব্যবহার করা দরকার , যাতে পাইথন স্ক্রিপ্ট বা হিমায়িত EXE হিসাবে চললে অ্যাপ্লিকেশনটি সঠিকভাবে চলতে পারে।
এর সাথে বলা হচ্ছে যে আমাদের এমন একটি ফাংশন প্রয়োজন যা আমাদের আপেক্ষিক পথে চলতে দেয়। সর্বোচ্চ পোস্ট করা ফাংশনটি ব্যবহার করে আমরা সহজেই আপেক্ষিক পথটি সমাধান করতে পারি।
def img_resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
আমরা উপরের ফাংশনটি এর মতো ব্যবহার করব যাতে অ্যাপ্লিকেশনটি কোনও স্ক্রিপ্ট বা হিমায়িত EXE হিসাবে চলমান থাকলে অ্যাপ্লিকেশন আইকনটি দেখা যায়।
icon_path = img_resource_path("app/img/app_icon.ico")
root.wm_iconbitmap(icon_path)
পরবর্তী পদক্ষেপটি হ'ল পাইনিস্টলারের নির্দেশ দেওয়া দরকার যে এটি সংকলন করার সময় অতিরিক্ত ফাইলগুলি কোথায় সন্ধান করতে হবে যাতে যখন অ্যাপ্লিকেশনটি চালানো হয় তখন তারা অস্থায়ী ডিরেক্টরিতে তৈরি হয়।
ডকুমেন্টেশনে দেখানো হিসাবে আমরা এই সমস্যাটি দুটি উপায়ে সমাধান করতে পারি , তবে আমি ব্যক্তিগতভাবে আমার নিজের .spec ফাইল পরিচালনা করতে পছন্দ করি যাতে আমরা এটি কীভাবে চলছি।
প্রথমত, আপনার কাছে অবশ্যই একটি .spec ফাইল থাকা উচিত। আমার ক্ষেত্রে, আমি pyinstaller
অতিরিক্ত আরগগুলি নিয়ে চালিয়ে যা প্রয়োজন তা তৈরি করতে সক্ষম হয়েছি , আপনি এখানে অতিরিক্ত আরগগুলি খুঁজে পেতে পারেন । এর কারণে, আমার স্পেক ফাইলটি আপনার চেয়ে কিছুটা আলাদা লাগতে পারে তবে আমি গুরুত্বপূর্ণ বিটগুলি ব্যাখ্যা করার পরে রেফারেন্সের জন্য এগুলি সব পোস্ট করছি।
যোগ_ফায়ালগুলি মূলত টুপলের সমন্বিত একটি তালিকা, আমার ক্ষেত্রে আমি কেবল একটি সাধারণ চিত্র যুক্ত করতে চাই, তবে আপনি একাধিক আইকোন, পিএনজি বা জেপিজির ব্যবহার যুক্ত('app/img/*.ico', 'app/img')
করতে পারেনadded_files = [ (), (), ()]
আপনি একাধিক আমদানি করারমতো আরও একটি টুপল তৈরিকরতে পারেন
টিউলের প্রথম অংশটি নির্ধারণ করে যে আপনি কোন ফাইল বা কোন ধরণের ফাইল যুক্ত করতে চান সেই সাথে তাদের কোথায় সন্ধান করবেন। এটি সিটিআরএল + সি হিসাবে ভাবেন
টিউলের দ্বিতীয় অংশটি পাইনস্টলারের কাছে বলে, পাথটি 'অ্যাপ / ইমগ /' তৈরি করতে এবং সেই ডিরেক্টরিতে ফাইলগুলি স্থাপন করতে আপনি যখন .exe রান করেন তখন যা কিছু টেম্প ডিরেক্টরি তৈরি হয় তার সাথে সম্পর্কিত। এটি সিটিআরএল + ভি হিসাবে ভাবেন
এর অধীনেa = Analysis([main...
, আমি সেট করেছিdatas=added_files
, মূলত এটি ব্যবহৃত হতdatas=[]
তবে আমরা আমদানিগুলির তালিকাটি ভাল, আমদানি করতে চাই যাতে আমরা আমাদের কাস্টম আমদানিতে পাস করি।
EXE- র জন্য নির্দিষ্ট আইকন না চাইলে আপনাকে এগুলি করার দরকার নেই, অনুমিত ফাইলের নীচে আমি পাইনস্টলারকে বলছি বিকল্পটির সাথে এক্সের জন্য আমার অ্যাপ্লিকেশন আইকনটি সেট করতে icon='app\\img\\app_icon.ico'
।
added_files = [
('app/img/app_icon.ico','app/img/')
]
a = Analysis(['main.py'],
pathex=['D:\\Github Repos\\Processes-Killer\\Process Killer'],
binaries=[],
datas=added_files,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='Process Killer',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True , uac_admin=True, icon='app\\img\\app_icon.ico')
EXE তে সংকলন করা হচ্ছে
আমি খুব অলস; আমার চেয়ে জিনিস টাইপ করা আমার পছন্দ নয়। আমি একটি .bat ফাইল তৈরি করেছি যা আমি কেবল ক্লিক করতে পারি। আপনাকে এটি করতে হবে না, এই কোডটি একটি কমান্ড প্রম্পট শেলের মধ্যে চলবে ঠিক এটি না করে।
যেহেতু .spec ফাইলটিতে আমাদের সমস্ত সংকলন সেটিংস এবং আরগগুলি (ওরফে বিকল্পগুলি) থাকে তবে আমাদের কেবল সেই .spec ফাইলটি পাইনস্টলারের কাছে দিতে হবে।
pyinstaller.exe "Process Killer.spec"
a.datas += ...
) সত্যই আমাকে এখনই সহায়তা করেছে। পাইনস্টলারের ডকুমেন্টেশন ব্যবহারের বিষয়ে কথা বলেCOLLECT
তবে এটি ব্যবহারের সময় বাইনারিগুলিতে ফাইলগুলি ফেলতে ব্যর্থ হয়--onefile