2012-07-13 15 views
9

का उपयोग किए बिना .pyo को .py फ़ाइलों को संकलित करना मैं python मॉड्यूल और संकुल के बड़े सेट को Pyo में संकलित करने में देख रहा हूं। मुझे पता है कि यह PYTHONOPTIMIZE पर्यावरण परिवर्तक या लॉन्च पर -O निर्दिष्ट करके संभव है। मैं सबसे छोटे पदचिह्न को संभव बनाने के लिए पीईसी के बजाय पियो को लागू करना चाहता हूं। मेरे तैनाती मॉड्यूल में ऐसा करने के लिए मुझे एक रैपर स्क्रिप्ट बनाना है जो वास्तविक स्क्रिप्ट को -O विकल्प के साथ लॉन्च करता है, क्योंकि पर्यावरण चर को दुभाषिया शुरू करने से पहले निर्दिष्ट किया जाना आवश्यक है।एक रैपर स्क्रिप्ट

क्या इसके आसपास कोई रास्ता है और प्रोग्रामिंग रूप से Pyo निर्माण को लागू करें?

सधन्यवाद, Thorsten

उत्तर

17

करने के लिए सभी मॉड्यूल पहले से संकलन, निम्नलिखित कमांड चलाएँ:

python -O -m compileall /path/to/your/files 

python compileall module संकलन का ख्याल रखता है, -O switch बनाता है यह उत्पादन .pyo फ़ाइलें।

लेकिन, आप जब तक -O स्विच हर रन याPYTHONOPTIMIZE environment var सेट किया गया है के लिए दिया जाता है इन उपयोग करने के लिए अजगर के लिए मजबूर नहीं कर सकते।

ध्यान दें कि सभी -O ध्वज assert कथन अक्षम कर देता है और __debug__ ध्वज False पर सेट करता है (और पायथन परीक्षण को अनुकूलित करेगा)। निर्दिष्ट करें-OO और docstrings गिराए गए हैं। ये अधिक गति अंतर या अंतरिक्ष बचत के लिए नहीं बनाते हैं, जब तक कि आप अत्यधिक डॉकस्ट्रिंग आकार या बहुत धीमे डीबग कोड का उपयोग नहीं करते।

देखें: What does Python optimization (-O or PYTHONOPTIMIZE) do?

+0

उत्तर के लिए धन्यवाद, लेकिन जैसा कि ऊपर उल्लिखित मैं स्विच के बारे में पता है और यह से बचने के लिए चाहते हैं। कारण यह है कि यह एक परिनियोजन उपकरण है और मैं लोगों को एक ही फाइल के दो अलग-अलग संस्करणों (पीईसी और पाययो) को गलती से तैनात करना चाहता हूं। वर्तमान में मैं ossystem के माध्यम से एक पायथन स्क्रिप्ट में एक python.exe -O कॉल करके ऐसा करता हूं। यह काम करता है लेकिन कुछ हद तक अजीब है, इसलिए मुझे आश्चर्य हुआ कि क्या मैं इससे छुटकारा पा सकता हूं। –

+0

प्रोग्रामेटिक रूप से इसे नियंत्रित करने में सक्षम होना अच्छा होगा (0 आसानी से) ... – martineau

+0

"ध्यान दें कि सभी -ओ ध्वज करता है जोरदार कथन अक्षम करता है। निर्दिष्ट करें-OO और docstrings को छोड़ दिया जाता है। ये बहुत गति अंतर नहीं बनाते हैं या अंतरिक्ष बचत। " <- यह वास्तव में इस बात पर निर्भर करता है कि आपके पास कितने 'जोर' और '__debug__' कथन हैं, है ना? आप जानते हैं कि वे धारणाओं के बारे में क्या कहते हैं। – DylanYoung

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