बिना किसी निर्भरता के चलने के लिए पायथन लिपि स्टैंडअलोन को कैसे निष्पादन योग्य बनाया जाए?


707

मैं एक पायथन एप्लिकेशन बना रहा हूं और अपने ग्राहकों को पायथन और मॉड्यूल स्थापित करने के लिए मजबूर नहीं करना चाहता।

तो, क्या पायथन स्क्रिप्ट को एक स्टैंडअलोन निष्पादन योग्य बनाने का एक तरीका है?


307
सवाल का हिस्सा है कि "मैं अपने ग्राहकों को पायथन और मॉड्यूल स्थापित करने के लिए मजबूर नहीं करना चाहता।" यह नहीं कहता कि ग्राहक ऐसा नहीं कर सकते, यह कहता है कि डेवलपर उन्हें ऐसा करने की आवश्यकता नहीं चाहता है। यहाँ बिंदु पर बहस करने का कोई मतलब नहीं है, क्योंकि ग्राहक स्वयं के लिए बोलने के लिए एसओ नहीं पढ़ रहे हैं। मैं सिर्फ youtube देखने के लिए एक फ़्लैश डेवलपमेंट एनवायरनमेंट इंस्टॉल नहीं करना चाहता, या सी डेवलपमेंट एनवायरनमेंट सिर्फ सुडोकू खेलने के लिए, या पायथन डेवलपमेंट एन्वायरमेंट पायथन में लिखे एंग्री बर्ड्स का एक संस्करण चलाने के लिए करना चाहता हूँ। यही कारण है कि पुनर्वितरण runtimes के लिए कर रहे हैं।
डेव

जवाबों:


243

आप उपयोग कर सकते हैं py2exe पहले से ही जवाब दिए और उपयोग के रूप में cython अपने प्रमुख कन्वर्ट करने के लिए .pyमें फ़ाइलों .pycकी तरह, सी संकलित फ़ाइलें, .dllWindows में और .soआम की तुलना में वापस लौटने के लिए, बहुत कठिन लिनक्स में .pyoऔर .pycफ़ाइलें (और यह भी प्रदर्शन में लाभ!)


1
उत्तर के लिए धन्यवाद। मैंने साइथॉन पर विचार किया है, लेकिन ऐसा लगता है कि अभी भी संकलित निष्पादन योग्य चलाने के लिए अजगर की आवश्यकता है। क्या आप साइपॉन का उपयोग करके .pyc को स्क्रिप्ट संकलित करने का मतलब है? (मुझे नहीं पता था कि साइथन में ऐसी कोई विशेषता है)
जेफ

9
मेरा मतलब है कि आपको दो समस्याएं हैं : बंद स्रोत और नो-डिप्स। बंद स्रोत के लिए सिथॉन का उपयोग करके सी लिबास में अपना महत्वपूर्ण कोड संकलित करें । No-dep के लिए py2exe का उपयोग करें और .pyd (साइथॉन संकलित) फाइलों के साथ एक निष्पादन योग्य बनाएं।
न्यूरिनो

7
आप पुस्तकालयों के बारे में क्या करेंगे (सुन्न, डरावना, matplotlib)? उदाहरण के लिए, क्लाइंट अपने कंप्यूटर पर इंस्टॉल किए बिना, निष्पादन योग्य से गिंटपुट (जिंकपुट) फ़ंक्शन का उपयोग कैसे कर पाएंगे।
चिम्पसारेहुंग्री

@chimpsarehungry स्टेटिक लिंकिंग के बारे में क्या?
ब्रैडेन बेस्ट

11
2008 में अंतिम रिलीज़ लगती है, क्या यह अभी भी कायम है?
Zitrax

302

आप पायथन कार्यक्रमों को स्टैंडअलोन निष्पादन योग्य के रूप में पैकेज करने के लिए PyInstaller का उपयोग कर सकते हैं । यह विंडोज, लिनक्स और मैक पर काम करता है।

PyInstaller क्विकस्टार्ट

PyPI से PyInstaller स्थापित करें:

pip install pyinstaller

अपने कार्यक्रम की निर्देशिका पर जाएं और चलाएं:

pyinstaller yourprogram.py

यह एक उपनिर्देशिका नामक बंडल उत्पन्न करेगा dist

अधिक विस्तृत पूर्वाभ्यास के लिए, मैनुअल देखें ।


10
यह ध्यान देने योग्य है कि pyinstaller एक .exe फ़ाइल में संकलित कर सकता है। इसके अलावा, जिस ओएस पर इसे चलाया जाता है, वह विंडोज पर चलने पर उस निष्पादन योग्य, यानी। Exe को बनाता है
रिचर्ड डी विट

2
@ ItayMoav-Malimovka वे पायथन 3 के समर्थन में काम कर रहे हैं। देखें github.com/pyinstaller/pyinstaller/tree/python3
फोनिक्स

3
जैसा कि @GeenHenk ने कहा, यदि आप विंडोज पर "कंपाइल" करते हैं तो यह एक एक्स बनाता है, ध्यान रखें कि आप लिनक्स पर विंडोज के लिए (एक्सई) कंपाइल नहीं कर सकते या विंडोज पर लिनक्स एक्जीक्यूटेबल बना सकते हैं। आप केवल उस प्लेटफ़ॉर्म का निष्पादन योग्य बना सकते हैं जिसे आप चला रहे हैं। (लिनक्स में आप इसे ट्रिक करने के लिए वाइन का उपयोग कर सकते हैं)
फोनिक्स

14
'pyinstaller' का उपयोग करना 'py2exe' की तुलना में आसान है। यह सुन्न, पांडा, कुछ भी सहित हर निर्भरता का ख्याल रखता है और आपको कार्यशील मंच पर एक एकल निष्पादन योग्य देता है!
अक्स

12
लगता है कि वास्तव में मैं क्या देख रहा था। और अब अजगर 3 का समर्थन करता है! धन्यवाद :)
डैनियल ग्रूसज़क

83

आप Nuitka की जांच करना चाह सकते हैं । यह अजगर स्रोत कोड लेता है और इसे C ++ API कॉल में परिवर्तित करता है। फिर यह एक निष्पादन योग्य बाइनरी (लिनक्स पर ईएलएफ) में संकलित करता है। यह अब कुछ वर्षों के लिए है और पायथन संस्करणों की एक विस्तृत श्रृंखला का समर्थन करता है।

यदि आप इसका उपयोग करते हैं तो आपको संभवतः एक प्रदर्शन सुधार भी मिलेगा। सिफारिश की।


5
Nuitka एक कमाल का उपकरण है। इसका उपयोग न करने की आवश्यकता नहीं है। मैं केवल एक बात बताता हूँ - यह केवल लिनक्स तक ही सीमित नहीं है - यह क्रॉस-प्लेटफ़ॉर्म है - इसका उपयोग करने का एक और कारण।
संजुतिरानी 16

5
Nuitka Python 2.6, 2.7, 3.2, 3.3 और 3.4 पर काम करता है, और क्रॉस-प्लेटफ़ॉर्म है: (Linux, FreeBSD, NetBSD, MacOS X, और Windows (32/64 बिट्स)। अन्य भी काम कर सकते हैं। आर्किटेक्चर: x86, x86_64 (amd64), और बांह। अन्य आर्किटेक्चर भी काम कर सकते हैं, बॉक्स से बाहर।)
जोनाथन हार्टले

यह सबसे हाल ही में 3.6 के लिए समर्थित नहीं है .. और खिड़कियों पर स्थापित करने के लिए एक बुरा सपना है
टेटोरा

मैकओएस हाई सिएरा + पायथन 3.5.2 पर आकर्षण की तरह काम करता है। धन्यवाद!
एंथनी एल।

क्या यह एक स्टैंडअलोन निष्पादन योग्य बनाता है?
आवाज

31

मैं पायथन 2.7 का उपयोग करके खिड़कियों पर स्टैंडअलोन फाइलें बनाने के बारे में कुछ उपयोगी जानकारी संकलित करना चाहूंगा।

मैंने py2.exe का उपयोग किया है और यह काम करता है, लेकिन मुझे कुछ समस्याएं थीं।

इस आखिरी कारण ने मुझे PyInstaller http://www.pyinstaller.org/ की कोशिश की ।

मेरी राय में, यह बहुत बेहतर है क्योंकि:

  • इसे इस्तेमाल करना ज्यादा आसान है।

मेरा सुझाव है कि उदाहरण के लिए निम्नलिखित लाइनों के साथ एक .bat फ़ाइल बनाना (pyinstaller.exe विंडोज पथ में होना चाहिए):

pyinstaller.exe --onefile MyCode.py

इसलिए, मुझे लगता है कि, कम से कम अजगर 2.7 के लिए, एक बेहतर और सरल विकल्प PyInstaller है।


3
--onefileझंडा आप इसे विंडोज पर पोर्टेबल बनाने के लिए मदद नहीं करेगा, क्योंकि निष्पादन अभी भी साथ लिंक करना चाहता है api-ms-win-crt-runtime-l1-1-0.dllपुस्तकालय (या / और अन्य) के माध्यम से जो स्थापित किया जाना चाहिए vcredistपैकेज। तो एक निर्भरता अभी भी है और चलाने से पहले स्थापित किया जाना चाहिए।
एंड्री

27

हां, पायथन स्क्रिप्ट को स्टैंडअलोन एक्जीक्यूटेबल में संकलित करना संभव है।

PyInstaller का उपयोग Windows , Linux , Mac OS X , FreeBSD , Solaris और AIX के तहत Python प्रोग्राम्स को स्टैंड-अलोन एक्जीक्यूटिव में बदलने के लिए किया जा सकता है । यह अनुशंसित कन्वर्टर्स में से एक है।

py2.exe केवल Windows प्लेटफ़ॉर्म में पायथन स्क्रिप्ट को निष्पादन योग्य में परिवर्तित करता है।

साइथन पायथन प्रोग्रामिंग भाषा और विस्तारित साइथन प्रोग्रामिंग भाषा दोनों के लिए एक स्थिर संकलक है।


2
इसके लिए धन्यवाद। मैं py2exe का उपयोग कर रहा था, और सभी के साथ काम करने वाले आइकन प्राप्त नहीं कर सका। PyInstaller ने पहली बार काम किया, और बहुत अच्छा लग रहा है!
चुडुआ

क्या मैं लिनक्स और मैकओएस के लिए विंडोज से स्टैंडअलोन निष्पादन योग्य बना सकता हूं? या मुझे VirtualBox पर लिनक्स और macOS स्थापित करना चाहिए? मेरे पास अपने लैपटॉप पर पर्याप्त खाली जगह नहीं है।
8Observer8

1
मुझे यहाँ प्रलेखन में मेरे प्रश्न का उत्तर मिला: pyinstaller.readthedocs.io/en/stable/…
8Observer8

26

और एक तीसरा विकल्प है cx_Freeze, जो क्रॉस-प्लेटफॉर्म है।


1
यहाँ हम २०१ ९ के फरवरी में हैं और २०१ cx_Freezeof के अंत से पीपीआई पर कोई सूचीबद्ध रिलीज़ नहीं हैं । क्या इस परियोजना को छोड़ दिया गया था?
user9074332

17

आपको py2.exe पसंद आ सकता है । तुम भी वहाँ लिनक्स में यह करने के लिए infos में मिल जाएगा


2
लेकिन आपको इसे पैकेज ऑल ऑप्शन देना होगा।
जैकब बाउयर

14

Py2.exe का उपयोग करें .... नीचे सेट की गई फ़ाइलों का उपयोग करें:

 from distutils.core import setup
 import py2exe

 from distutils.filelist import findall
 import matplotlib

 setup(
       console=['PlotMemInfo.py'],

       options={
                'py2exe': {
                'packages' : ['matplotlib'],
            'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll',
                 'libgdk_pixbuf-2.0-0.dll']
                          }
                },
       data_files = matplotlib.get_py2exe_datafiles()
     )

मैंने ऐसा किया और इसने एक python27.dll फ़ाइल बनाई और यह अभी भी आवश्यक है। मैंने python27.dll फ़ाइल रखने वाले फ़ोल्डर से .exe फ़ाइल को स्थानांतरित कर दिया है और .exe फ़ाइल अब नहीं चलती है।
mjwrazor

क्या आप लिनक्स और macOS के लिए ऐसी स्क्रिप्ट दिखा सकते हैं? मैं लिनक्स और macOS के लिए विंडोज से स्टैंडअलोन निष्पादन योग्य फाइलें बनाना चाहता हूं।
8Observer8

13

मुझे pyinstaller पसंद है - विशेष रूप से " विंडोेड " प्रकार:

pyinstaller --onefile --windowed myscript.py

यह एक डिस्टर्ब / फोल्डर में एक सिंगल * .exe फाइल बनाएगा।


11

मैं अजगर 2.3 - 2.7 जैसे बेहतर पिछड़े संगतता के लिए pyinstaller की भी सिफारिश करता हूं
के लिए py2exe , आप अजगर 2.6 होनी चाहिए


pyinstaller में आयात समस्याएं हैं। उदाहरण के लिए: मेरे मामले में, मैं इस डीआईआर में हूँ ~ / दस्तावेज / python101 / और ex50_pycomp.py और ex50.py इस dir में हैं। ex50_pycomp.py ex50.py आयात कर रहा है। मैं pyinstaller ex50_pycomp.py चलाता हूं और मुझे सभी कंपाइल किए गए, डिस्टर्ब दिखाई देते हैं। सब ठीक है? मैं डिस्ट / ex50_pycomp / में cd और यह काम करता है ex50_pycomp चलाते हैं। एक बार जब मैं इस ex50_pycom को virtualmachine में डाल देता हूं, तो यह इम्पोर्ट एरर कहता है और दूसरे लिनक्स बॉक्स में यह कहता है "-Bash :/ex_50_pycom: बाइनरी फाइल को एक्जिक्यूट नहीं कर सकता: एग्ज फॉर्मेट एरर"
संचालित_पाइडर

prob1: मैं python2.7 का उपयोग कर रहा था, लेकिन pyinstaller python3 के साथ बात कर रहा था python3 setup.py python3 setup.py का निर्माण आपके python3 स्थापित करेगा सभी pkg_resource प्रोब 3 मिलेगा, अगर sys_path का उपयोग करना एक समस्या बन जाती है, तो इस तरह से अपना पथ दें जैसे कि यह pyinstaller-hidden import = pkg_resources --onefile file.py --path = my_path rw-rw-r-- my_path: python3's dist folder pyinstaller --hidden-import = pkg_resources --onefile file.py --path = / usr / local / lib /python3.5/dist-packages/my_code_lib-0+untagged.8.gd264bd5.dirty-py3.5.egg/my_folder -rw-rw-
r--

8

पायथन 3.2 लिपियों के लिए एकमात्र विकल्प Cxfreeze है। इसे स्रोतों से बनाएँ अन्यथा यह काम नहीं करेगा।

अजगर 2.x के लिए मैं pyinstaller का सुझाव देता हूं क्योंकि यह CxFreeze के विपरीत एक एकल निष्पादन योग्य में एक अजगर प्रोग्राम को पैकेज कर सकता है जो कि पुस्तकालयों को भी आउटपुट करता है।


6

py2exe आपके द्वारा इच्छित exe फ़ाइल बना देगा लेकिन आपको अपने नए exe का उपयोग करने जा रहे मशीन पर MSVCR90.dll का समान संस्करण होना चाहिए। अधिक जानकारी के लिए http://www.py2exe.org/index.cgi/Tutorial देखें ।


6

आप @ https://wiki.python.org/moin/DistributionUtilities में सूचीबद्ध वितरण उपयोगिताओं की सूची पा सकते हैं ।

मैं बीबफ्रीज का उपयोग करता हूं और यह बहुत अच्छी तरह से काम कर रहा है (फिर भी अजगर 3 समर्थन के लिए है)।


stackoverflow.com/questions/33683133/… मैं bbfreeze बहुत अच्छे पैकेज का उपयोग करता हूं।
199 बजे user914425

क्या यह निर्भरता का ध्यान रखता है और प्रासंगिक py मॉड्यूल स्थापित करता है?
Volatil3

@ Volatil3 हां, सभी आश्रितों का ध्यान रखा जाता है। होस्ट सिस्टम पर मॉड्यूल की स्थापना के लिए WRT - विभिन्न प्रकार के संकलन हैं। Bbfreeze सब कुछ कई .soफ़ाइलों में संकलित करेगा , या .egg फ़ाइलों को सीधे कॉपी करेगा और वे सभी एक ही निर्देशिका (या एकल फ़ाइल के रूप में) में मौजूद रहेंगे। कोई स्थापना की आवश्यकता है।
जो

6
pyinstaller yourfile.py -F --onefile

यह Windows महत्वपूर्ण नोट में एक स्टैंडअलोन EXE फ़ाइल बनाता है: exe फ़ाइल 'डिस्ट' नामक एक फ़ोल्डर में उत्पन्न होगी।

आप का उपयोग करके pyinstaller स्थापित कर सकते हैं pip install PyInstaller

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें


4

अजगर कोड की बिल्कुल पैकेजिंग नहीं है, लेकिन अब गूगल से भी क्रोधी है, जो जाने के लिए कोड ट्रांसपाइल्स करता है। यह अजगर सी एपी का समर्थन नहीं करता है, इसलिए यह सभी परियोजनाओं के लिए काम नहीं कर सकता है।


4

Pyinstaller का उपयोग करते हुए, मैंने बनाने के बजाय .exe से शॉर्टकट का उपयोग करके एक बेहतर तरीका पाया --onefile। वैसे भी आसपास कुछ डेटा फाइलें हैं और यदि आप साइट-आधारित ऐप चला रहे हैं तो आपका प्रोग्राम html, js, css फ़ाइलों पर भी निर्भर करता है। इन सभी फाइलों को कहीं ले जाने का कोई मतलब नहीं है .. इसके बजाय अगर हम काम करने के तरीके को आगे बढ़ाते हैं।

Exe के लिए एक शॉर्टकट है, शीर्ष पर ले जाने और लक्ष्य रखा और शुरू में पथ निर्दिष्ट किया गया है, जिले के लिए जा रहा \ फ़ोल्डर संबंधित पथ के लिए: Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\" करने के लिए "GTFS-प्रबंधक" का नाम बदलने तो कुछ भी करने के लिए शॉर्टकट का नाम बदल सकते
डबल अब जब मैं शॉर्टकट पर क्लिक करें, ऐसा लगता है जैसे मैंने फ़ाइल को अजगर बना दिया है! मैंने इस दृष्टिकोण को इस --onefileरूप में बेहतर पाया :

  1. वनफाइल के मामले में, win7 OS के लिए गायब होने वाले .dll के साथ एक समस्या है जिसे कुछ पूर्व स्थापना आदि की जरूरत है। कई फ़ाइलों के साथ सामान्य निर्माण के साथ, ऐसा कोई समस्या नहीं है।
  2. मेरी पाइथन स्क्रिप्ट का उपयोग करने वाली सभी फाइलें (यह एक बवंडर वेब सर्वर को तैनात कर रही है और वहां होने के लिए संपूर्ण फ्रीकिन की वेबसाइट की जरूरत है!) को कहीं भी ले जाने की आवश्यकता नहीं है: मैं बस शीर्ष पर शॉर्टकट बनाता हूं।
  3. मैं वास्तव में ubuntu (रन python3 myfile.py) और विंडोज़ (शॉर्टकट पर डबल-क्लिक करें) में इसी सटीक फ़ोल्डर का उपयोग कर सकता हूं।
  4. डेटा फ़ाइलों आदि को शामिल करने के लिए .spec फ़ाइल की अत्यधिक जटिल हैकिंग से मुझे परेशान होने की आवश्यकता नहीं है।

ओह, निर्माण के बाद बिल्ड फ़ोल्डर को हटाने के लिए याद रखें, आकार पर बचाएगा।


नमस्ते, बस अद्यतन कर रहा हूँ .. मैंने UPX संपीड़न को त्यागने का निर्णय लिया और अंत में - theonefile तरीका जाना। एक को चुनना था, क्योंकि वर्तमान में UPX में एक विशेष DLL को संपीड़ित करने का एक बग है।
निखिल वीजे

3

ग, सी संकलन और gcc के साथ लिंक करने के लिए Cython का उपयोग करें। एक और हो सकता है, कोर कार्यों को ग में करें (जिन्हें आप रिवर्स करना कठिन बनाना चाहते हैं), उन्हें संकलित करें और संकलित कोड को आयात करने के लिए अजगर को बढ़ावा देने का उपयोग करें (साथ ही आपको बहुत तेज़ कोड निष्पादन मिलता है)। फिर वितरित करने के लिए किसी भी उपकरण का उपयोग करें।


1

मुझे बताया गया है कि PyRun, https://www.egenix.com/products/python/PyRun/ भी एक विकल्प है।


5
किसी समाधान का लिंक स्वागत योग्य है, लेकिन कृपया सुनिश्चित करें कि आपका उत्तर इसके बिना उपयोगी है: लिंक के चारों ओर संदर्भ जोड़ें ताकि आपके साथी उपयोगकर्ताओं को कुछ पता चले कि यह क्या है और यह क्यों है, तो पृष्ठ के सबसे प्रासंगिक हिस्से को उद्धृत करें ' लक्ष्य पृष्ठ अनुपलब्ध होने की स्थिति में पुनः लिंक करना। एक लिंक से थोड़ा अधिक उत्तर देने वाले उत्तर हटाए जा सकते हैं।
पेट्टर फ्रबर्ग

यह विकल्प वर्तमान में विंडोज का समर्थन नहीं करता है।
बॉब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.