2008-10-10 8 views
28

मैं लिनक्स में एक स्टैंडअलोन पायथन एप्लिकेशन कैसे वितरित कर सकता हूं?लिनक्स में स्टैंडअलोन पायथन अनुप्रयोग

मुझे लगता है कि मैं किसी भी आधुनिक वितरण में हाल ही में पाइथन दुभाषिया की उपस्थिति के लिए ले सकता हूं। समस्या उन पुस्तकालयों से निपट रही है जो मानक पुस्तकालय से संबंधित नहीं हैं, यानी wxPython, scipy, पायथन क्रिप्टोग्राफिक टूलकिट, रिपोर्टलैब, और इसी तरह से।

क्या कोई काम कर रहे लिनक्स समकक्ष है, कहें, py2exe (जिस तरह से, मैंने कभी कोशिश नहीं की है)? क्या कोई मुफ़्त है, ओपनसोर्स एक है?

उत्तर

-10

नहीं।

पायथन विभिन्न सेटअप के संबंध में कुख्यात रूप से flaky है। एक पायथन ऐप को तैनात करने का एकमात्र तरीका है दुभाषिया और पुस्तकालयों के पूरे बंडल को शिप करना है जिसे आप अपने कोड के साथ भरोसा कर रहे हैं। यह सबसे अधिक संभावना काम करेगा।

+2

यह मेरा अनुभव नहीं रहा है। निश्चित रूप से आप तीसरे पक्ष के पुस्तकालयों को गलत तरीके से सेट कर सकते हैं, या यहां तक ​​कि पाइथन को गलत तरीके से स्थापित कर सकते हैं, लेकिन आम तौर पर मुझे मानक पायथन प्रोग्राम में कोई समस्या नहीं है। जब आप नई सुविधाओं का उपयोग करते हैं तो पिछले संस्करण में जाने के अलावा पाठ्यक्रम :)। शायद आप जावा (टीएम) के बारे में सोच रहे थे? –

+0

@ एएल। फ्लानगन: असल में, मैं जावा से नफरत करता हूं, मुझे यह सॉफ्टवेयर वितरण के रूप में बहुत मजबूत लगता है। – Marcin

7

आप इसे वितरण-तटस्थ प्रारूप में आसानी से नहीं कर सकते हैं। केवल विश्वसनीय निर्भरता ट्रैकिंग तंत्र वितरण पर पैकेज प्रबंधन प्रणालियों में बनाए जाते हैं और वितरण से वितरण में भिन्न होंगे। आपको फेडोरा, उबंटू और डेबियन इत्यादि के लिए डीबीएस प्रभावी ढंग से करना होगा।

Py2exe विंडोज पर ठीक काम करता है। यह आपके आवश्यक प्रोग्राम को शुरू करने वाले अजगर दुभाषिया के लिए आवश्यक सभी डीएलएल और एक रैपर के साथ वितरण बनाता है। यह स्थापित करने के लिए काफी सरल है - बस इसे एक निर्देशिका में छोड़ दें - इसलिए इसके लिए एक एमएसआई फ़ाइल बनाना मामूली है।

9

आप setuptools में निर्भरता घोषणाओं को देखना चाहते हैं। यह आश्वस्त करने का एक तरीका प्रदान कर सकता है कि सही पैकेज या तो पर्यावरण में उपलब्ध हैं या उचित विशेषाधिकार वाले किसी व्यक्ति द्वारा स्थापित किया जा सकता है।

+0

मुझे पता है @ एसएलॉट यह जानता है, लेकिन दूसरों के लिए: यह एक पायथन लाइब्रेरी या अन्य डेवलपर्स को एप्लिकेशन वितरित करने का एक शानदार तरीका है, जो आपके आवेदन के काम से पहले पाइथन के सही संस्करण को स्थापित करने से कोई फर्क नहीं पड़ता। लेकिन यह अंत उपयोगकर्ताओं को वितरित करने का बिल्कुल गलत तरीका है, जो नहीं जानते कि पाइथन क्या है, पूरी तरह से नहीं जायेगा और अपना आवेदन काम करने के लिए इंस्टॉल नहीं करेगा, और 0.2% जो करने के लिए, वे गलत स्थापित करेंगे संस्करण। लिनक्स पैकेज –

22

एक डेब (डेबियन-व्युत्पन्न सब कुछ के लिए) और एक आरपीएम (फेडोरा/एसयूएसई के लिए) बनाएं। पैकेजिंग में सही निर्भरता जोड़ें और आप उचित रूप से सुनिश्चित कर सकते हैं कि यह काम करेगा।

+1

+1 इस अंत को अंत करने के लिए कोई अच्छा संदर्भ है? –

+7

के विचार को सुझाव देने के लिए – fabrizioM

+0

http://showmedo.com/videotutorials/video?name=linuxJensMakingDeb&fromSeriesID=37 – bagonyi

5

मेरे प्रोग्राम का उपयोग काफी सीमित है, इसलिए सेतुप्टोल्स मेरे लिए अधिक है, इसलिए यहां मेरा होमग्राउन विकल्प है।

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

# program startup code 
import os 
import sys 
import site 
path = os.path.abspath(os.path.dirname(__file__)) 
ver = 'python%d.%d' % sys.version_info[:2] 
thirdparty = os.path.join(path, 'third-party', 'lib', ver, 'site-packages') 
site.addsitedir(thirdparty) 

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

# sample third-party/Makefile 
PYTHON_VER = `python -c "import sys; \ 
     print 'python%d.%d' % sys.version_info[:2]"` 
PYTHON_PATH = lib/$(PYTHON_VER)/site-packages 
MODS = egenix-mx-base-3.0.0 # etc 

.PHONY: all init clean realclean $(MODS) 
all: $(MODS) 
$(MODS): init 
init: 
    mkdir -p bin 
    mkdir -p $(PYTHON_PATH) 
clean: 
    rm -rf $(MODS) 
realclean: clean 
    rm -rf bin 
    rm -rf lib 

egenix-mx-base-3.0.0: 
    tar xzf [email protected] 
    cd [email protected] && python setup.py install --prefix=.. 
    rm -rf [email protected] 
10

आप ऐसा करने के लिए cx_Freeze का उपयोग कर सकते हैं। यह सिर्फ py2exe (दुभाषिया और स्टार्टअप स्क्रिप्ट और सभी आवश्यक पुस्तकालयों और मॉड्यूल के साथ बंडल) की तरह है, लेकिन लिनक्स और विंडोज दोनों पर काम करता है।

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

यदि आप काफी सरल वितरण कर रहे हैं (यानी आप जानते हैं कि आपका निर्माण पर्यावरण और तैनाती वातावरण समान हैं), तो यह जटिल आरपीएम/डेब/अंडा/आदि चरण से बचाता है (सीएक्स_फ्रीज़ का उपयोग करना बहुत आसान है, खासकर यदि आप py2exe से परिचित हैं)। यदि नहीं, तो अपने स्वयं के निर्भरता इंस्टॉलर को डेब/आरपीएम/अंडा/आदि भवन में घुमाने से कुछ भी काम करेगा, इस पर निर्भर करता है कि आप कितना काम करना चाहते हैं, आवश्यक संस्करणों के साथ कितना लचीलापन, और निर्भरता क्या है।

0

मुझे लगता है कि आप अधिकतर आधुनिक लिनक्स वितरणों पर स्वीकृत पायथन समर्थन के लिए सुरक्षित रूप से सुरक्षित रूप से ले सकते हैं - इसके बिना जब तक एक साइन त्रुटि संदेश दिया जाता है, तो उपयोगकर्ताओं को शायद यह काम करने में सक्षम होना चाहिए कि इसे अपने आप कैसे प्राप्त करें (आप इसके लिए एक सरल बैश स्टार्टअप स्क्रिप्ट का उपयोग कर सकते हैं):

#!/bin/bash 
if [ -e /usr/bin/python ] 
then 
    echo "Python found!" 
else 
    echo "Python missing!" 
fi 
संबंधित मुद्दे