2011-01-14 10 views
5

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

क्या एप्लिकेशन में शामिल पाइथन स्रोत फ़ाइलों की एक बड़ी संख्या लेने और स्वचालित रूप से उन्हें एक स्रोत फ़ाइल (या .pyc फ़ाइल) में कम करने का कोई आसान तरीका है? सादगी के लिए, केवल एक फ़ाइल को "प्रवेश बिंदु" माना जाएगा और if __name__ == '__main__' होगा। अंतिम फ़ाइल को अभी भी पायथन दुभाषिया द्वारा निष्पादन योग्य होने की आवश्यकता है, इसलिए मैं पाइथन-टू-एक्सई जनरेटर का उपयोग नहीं कर सकता।

उत्तर

4

यदि आप एक ज़िप फ़ाइल अपलोड नहीं कर सकते हैं, तो शायद आप here निहित कुछ सुझावों का पालन कर सकते हैं। विचार एक स्क्रिप्ट फ़ाइल बनाने और अपलोड करना है जिसमें एक पाइथन शेबैंग लाइन (दुभाषिया द्वारा अनदेखा) शामिल है जो ज़िप फ़ाइल संग्रह में प्रीपेड किया गया है। फिर आप पाइथन दुभाषिया को ज़िप फ़ाइल को सीधे पढ़ सकते हैं या आप इसे खोल से निष्पादित कर सकते हैं। यह काम करने के लिए, आपको कम से कम पायथन 2.6 का उपयोग करने की आवश्यकता है।

zip testapp.zip * 
echo '#!/usr/bin/env python' | cat - testapp.zip > testapp.py 
chmod 755 testapp.py 

पर अमल करने के लिए या तो:

python testapp.py 

या:

./testapp.py 

के रूप में ब्लॉग पोस्ट में चर्चा की, क्या संस्करण के आधार पर पायथन हैं आप का समर्थन करने की जरूरत है और क्या सुविधाओं की जरूरत है, एक उचित पैकेज बनाने और cre बनाने के लिए आवश्यक __main__.py फ़ाइलों और __init__.py फ़ाइलों को शामिल करने के लिए आपको अपने स्रोत लेआउट में कई समायोजन करने की आवश्यकता हो सकती है मुख्य पैकेज निर्देशिका के बाहर एक सिम्लिंक __main__.py खा लिया। यह एक कड़वाहट का थोड़ा सा है, लेकिन, जब आप इसे काम कर लेते हैं, तो इसे स्वचालित करना आसान होना चाहिए, मान लें कि आपका परीक्षण सर्वर ऐसी छद्म पाठ फ़ाइल को संभाल सकता है। यहां की मुख्य अंतर्दृष्टि यह है कि पाइथन दुभाषिया स्वयं ज़िप संग्रह को पढ़ रहा है और अनजिप कर रहा है, बाहरी कार्यक्रम नहीं।

यदि परीक्षण सर्वर मानक POSIX शैल स्क्रिप्ट को संभाल सकता है, तो दूसरा विकल्प एक स्क्रिप्ट बनाने के लिए हो सकता है जो के सेट में सबकुछ लपेटता है फ़ाइलों को एक बड़ी स्क्रिप्ट के भीतर।

+0

+1 बहुत अच्छी चाल, मुझे नहीं पता था कि यह संभव था। – plundra

+0

बहुत चालाक। हालांकि, आपका लिंक टूटा हुआ प्रतीत होता है। क्या यह आलेख अभी भी आसपास है? – Cerin

+0

क्षमा करें, पिछला 'एल' गायब था, अब तय किया गया है। –

संबंधित मुद्दे