2010-12-29 15 views
8

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

ऐसे मामलों में संभावित समाधान क्या हैं?

अग्रिम धन्यवाद!

+0

संभावित डुप्लिकेट [py2exe - एकल निष्पादन योग्य फ़ाइल उत्पन्न करें] (http://stackoverflow.com/questions/112698/py2exe-generate-single-executable-file) –

+2

मैं फ्रीब्स के तहत exe कैसे चला सकता हूं? – Andriy

+1

डुप्लिकेट प्रश्न के लिए * उत्तर * स्पष्ट रूप से ** पायइंस्टॉलर ** को इंगित करता है, जो विंडोज, लिनक्स और ओएस एक्स के लिए एक्जिक्यूटिव बनाता है। –

उत्तर

15

कार्यक्रम है कि आप के लिए क्या पूछना कर सकते हैं:

लेकिन mentio के रूप में ned आप वितरित के साथ एक पैकेज भी बना सकते हैं और अन्य पैकेज निर्भरताओं के रूप में कर सकते हैं। फिर आप उस पैकेज को स्थापित करने के लिए pip का उपयोग कर सकते हैं, और यह सभी संकुल को स्थापित करेगा। हालांकि, आपको अभी भी पाइथन और पीआईपी स्थापित करने की आवश्यकता है।

2

पायथन वर्तमान निर्देशिका में import मॉड्यूल भी देखेंगे, इसलिए आपको उन्हें पायथन निर्देशिका में स्थापित करने की आवश्यकता नहीं है। आपका वितरण फ़ाइल संरचना दिखाई देंगे:

main.py 
module1/ 
    __init__.py, ... 
module2/ 
    __init__.py, ... 

main.py कहाँ import module1, module2

2

आप शायद अपनी स्क्रिप्ट से एक अजगर पैकेज बनाने के लिए चाहते हैं। अंत में आप किसी भी मेजबान पर pip install mypackage करने में सक्षम होंगे और सभी आवश्यक मॉड्यूल स्वचालित रूप से डाउनलोड और इंस्टॉल हो जाएंगे।

See this question on how to create such a package

3

cx_freeze आपकी पाइथन स्क्रिप्ट को स्टैंडअलोन पायथन लोडर में जोड़ देगा और प्रोग्राम युक्त एक निर्देशिका तैयार करेगा, और साझा लाइब्रेरी निर्भरताएं। इसके बाद आप परिणामस्वरूप वितरण को पाइथन या आपके मॉड्यूल से स्वतंत्र अन्य मशीनों में कॉपी कर सकते हैं।

$ cat hello.py 
print "Hello, World!" 
$ ls dist/ 
datetime.so _heapq.so hello libpython2.6.so.1.0 readline.so 
$ cat hello.py 
print "Hello, World!" 
$ cxfreeze hello.py 
... <snip> ... 
$ ls dist/ 
datetime.so _heapq.so hello libpython2.6.so.1.0 readline.so 
$ ./dist/hello 
Hello, World! 

एक बेहतर जवाब एक PIP पैकेज कि निर्भरता के रूप में इन तृतीय मॉड्यूल की पहचान करता है बनाने के लिए हो सकता है, तो के रूप में स्थापना के रूप में आसान हो सकता है "पिप mypackage स्थापित करें; ./package"

+0

क्या यह वास्तव में सी को संकलित करता है? मैंने सोचा कि यह py2exe की तरह काम करता है: सभी पायथन फ़ाइलों को एक .zip में रखें और इसे एक छोटे निष्पादन योग्य के साथ फ्यूज करें जो इसे पायथन रनटाइम पर अनजिप करता है और फ़ीड करता है। – delnan

+0

सही; यह मूल पायथन फ्रीज के साथ उलझा हुआ है। सीएक्स-फ्रीज यूटिलिटी एक स्टब लोडर को ज़िप-संपीड़ित मॉड्यूल को जोड़ती है। MOSREF के कंपाइलर के साथ मैंने इसे कैसे हासिल किया उससे बहुत अलग नहीं है। – swdunlop

+0

//, क्या यह काम करता है अगर सिस्टम पर पाइथन का संस्करण स्थापित नहीं है, हालांकि? –

0

मैं स्क्रिप्ट जो आयात है ये मॉड्यूल: urllib, urllib2, cookielib, BaseHTTPServer, sys, tempfile, paramiko, logging, re, OptionParser, lxml।

शायद आप अपनी स्क्रिप्ट से एक पायथन पैकेज बनाना चाहते हैं। अंत में आप किसी भी मेजबान पर माइपैकेज स्थापित करने में सक्षम होंगे और सभी आवश्यक मॉड्यूल डाउनलोड हो जाएंगे और स्वचालित रूप से इंस्टॉल हो जाएंगे।

  1. लगता है कि मैं
  2. एक और मेजबान को कॉपी अजगर पैकेज के रूप में स्क्रिप्ट है
  3. पिप शुरू कर दिया mypackage

स्थापित के रूप में मैं समझ गया यह मॉड्यूल कि आयातित किया जाना चाहिए के लिए दिखेगा और डाउनलोड और निर्भरता स्थापित करें।

यह मेरे मामले में बहुत अच्छा समाधान नहीं है। अन्य होस्ट (~ 20) पर उपयोगकर्ता अतिरिक्त डाउनलोड/इंस्टॉल प्रक्रिया के बिना स्क्रिप्ट चलाने में सक्षम होना चाहिए।

आशा है कि cx_freeze मुझे चाहिए। आपके उत्तरों के लिए धन्यवाद।