എന്തുകൊണ്ടാണ് സ്റ്റാൻഡ്‌അലോൺ Python ആപ്പുകൾ നിർമ്മിക്കുന്നത് പ്രയാസകരമാകുന്നത്

ഒരു ഉപയോഗപ്രദമായ Python ടൂൾ നിർമ്മിക്കാൻ നിങ്ങൾ ആഴ്ചകൾ ചിലവഴിക്കുന്നു. അത് നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ കൃത്യമായി പ്രവർത്തിക്കുന്നു. നിങ്ങൾ അത് ഒരു സഹപ്രവർത്തകനുമായി പങ്കിടാൻ ശ്രമിക്കുന്നു. എന്നാൽ അവരുടെ കമ്പ്യൂട്ടറിൽ Python ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ലാത്തതിനാൽ അത് പ്രവർത്തിക്കുന്നില്ല.

ഇതൊരു സാധാരണ പ്രശ്നമാണ്. എല്ലായിടത്തും പ്രവർത്തിക്കുന്ന രീതിയിൽ Python-നെ ഒരു സിംഗിൾ ഫയലായി പാക്കേജ് ചെയ്യുന്നത് പ്രയാസകരമാണ്. ഇത് വെറുമൊരു requirements file ഇല്ലാത്ത പ്രശ്നം മാത്രമല്ല.

പ്രശ്നം തുടങ്ങുന്നത് Python പ്രവർത്തിക്കുന്ന രീതിയിൽ നിന്നാണ്.

Python ഒരു ഡൈനാമിക് (dynamic) ഭാഷയാണ്. പ്രോഗ്രാം പ്രവർത്തിച്ചുകൊണ്ടിരിക്കുമ്പോൾ തന്നെ ഇത് പല തീരുമാനങ്ങളും എടുക്കുന്നു. ഇത് ലൈബ്രറികൾ തത്സമയം (on the fly) ഇംപോർട്ട് ചെയ്യാനും, ഫംഗ്ഷനുകൾ പ്രവർത്തിക്കുമ്പോൾ അവയുടെ രീതിയിൽ മാറ്റം വരുത്താനും കഴിയും.

Go അല്ലെങ്കിൽ Rust പോലുള്ള കംപൈൽഡ് (compiled) ഭാഷകൾ പ്രോഗ്രാം തുടങ്ങുന്നതിന് മുമ്പ് തന്നെ എല്ലാം തീരുമാനിക്കുന്നു. ചെറിയതും വേഗതയേറിയതുമായ ഫയലുകൾ നിർമ്മിക്കുന്നതിനായി അവ ഉപയോഗശൂന്യമായ കോഡുകൾ ഒഴിവാക്കുന്നു.

Python-ന് ഇത് ചെയ്യാൻ കഴിയില്ല. നിങ്ങളുടെ കോഡിന് റൺടൈമിൽ (runtime) ഏത് ഭാഗങ്ങൾ ആവശ്യമായി വരുമെന്ന് എളുപ്പത്തിൽ പ്രവചിക്കാൻ കഴിയില്ല. അത് കൃത്യമായി പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കാൻ, മുഴുവൻ Python റൺടൈമും ഉൾപ്പെടുത്തേണ്ടി വരും.

ഇത് ലൈബ്രറി പ്രശ്നങ്ങളിലേക്ക് നയിക്കുന്നു.

മറ്റ് ഭാഷകളിൽ, ഫയലുകൾ ചെറുതാക്കി നിർത്താൻ കംപൈലറുകൾ tree-shaking ഉപയോഗിക്കുന്നു. Python-ന് ഇത് ഉപയോഗിക്കാൻ കഴിയില്ല. ഓരോ ഡിപെൻഡൻസിയും (dependency) അതിന്റെ സബ്-ഡിപെൻഡൻസികളും നിങ്ങൾ ഉൾപ്പെടുത്തണം. കൂടാതെ കംപൈൽ ചെയ്ത ബൈനറി ഫയലുകളും ഉൾപ്പെടുത്തേണ്ടതുണ്ട്. ഇത് നിങ്ങളുടെ ചെറിയ സ്ക്രിപ്റ്റിനെ 300MB വലിപ്പമുള്ള ഒരു പാക്കേജായി മാറ്റുന്നു.

നിങ്ങൾക്ക് പ്രധാനമായും മൂന്ന് ഓപ്ഷനുകളുണ്ട്:

  • ടാർഗെറ്റ് മെഷീനിൽ Python ആവശ്യമാണ്. ഇത് ഡെവലപ്പർമാർക്ക് അനുയോജ്യമാണ്, എന്നാൽ സാധാരണ ഉപയോക്താക്കൾക്ക് ഇത് പ്രയാസകരമാണ്.
  • ഇന്റർപ്രെറ്റർ (interpreter) ബണ്ടിൽ ചെയ്യുക. PyInstaller അല്ലെങ്കിൽ Nuitka പോലുള്ള ടൂളുകൾ റൺടൈമിനെ നിങ്ങളുടെ ആപ്പിലേക്ക് പാക്ക് ചെയ്യുന്നു. PyInstaller വളരെ പ്രചാരമുള്ളതാണ്. Nuitka വേഗത വർദ്ധിപ്പിക്കുന്നതിനായി നിങ്ങളുടെ കോഡിനെ C ഭാഷയിലേക്ക് മാറ്റുന്നു.
  • Docker ഉപയോഗിക്കുക. മുഴുവൻ ഓപ്പറേറ്റിംഗ് സിസ്റ്റം ലെയറും ഉൾപ്പെടുത്തുന്നതിലൂടെ ഇത് പൂർണ്ണമായ വിശ്വാസ്യത നൽകുന്നു. ഇത് സെർവറുകൾക്ക് മികച്ചതാണ്, എന്നാൽ വലിയ ഫയലുകൾ സൃഷ്ടിക്കുന്നു.

PyApp പോലുള്ള പുതിയ ടൂളുകൾ ഇതിനൊരു മധ്യമാർഗ്ഗം വാഗ്ദാനം ചെയ്യുന്നു. നിങ്ങൾക്ക് അനുയോജ്യമായ Python പതിപ്പ് ഡൗൺലോഡ് ചെയ്യാൻ അവ ഒരു ചെറിയ ലോഞ്ചർ ഉപയോഗിക്കുന്നു.

എങ്ങനെ തിരഞ്ഞെടുക്കാം:

• സാങ്കേതിക ടീമുകൾക്കായി: ഒരു virtual environment-ഉം requirements file-ഉം ഉപയോഗിക്കുക. • ഡെവലപ്പർമാർ അല്ലാത്തവർക്കായി: PyInstaller ഉപയോഗിക്കുക. ഇത് ഏറ്റവും കൂടുതൽ പരീക്ഷിക്കപ്പെട്ട രീതിയാണ്. • സെർവറുകൾക്കും ഡാറ്റാ പൈപ്പ്‌ലൈനുകൾക്കുമായി: Docker ഉപയോഗിക്കുക. ഇവിടെ ഫയൽ വലിപ്പത്തേക്കാൾ വിശ്വാസ്യതയ്ക്കാണ് പ്രാധാന്യം. • വേഗത പ്രധാനപ്പെട്ട ഡെസ്ക്ടോപ്പ് ആപ്പുകൾക്കായി: Nuitka ഉപയോഗിക്കുക.

ഈ പ്രശ്നം പരിഹരിക്കാൻ Python അതിന്റെ അടിസ്ഥാന സ്വഭാവം മാറ്റുന്നില്ല. ഈ ഭാഷ ഡൈനാമിക് ആയി തന്നെ തുടരുന്നു. ഈ വിടവ് നികത്താൻ മികച്ച ടൂളുകളെ ആശ്രയിക്കേണ്ടി വരും.

Source: https://dev.to/azadarjoe/why-standalone-python-apps-are-so-hard-to-build-3g31