2013-08-19 5 views
8

मैं आसान तैनाती के लिए एक आरपीएम के अंदर अपने virtenv पर्यावरण के साथ एक पायथन आवेदन बंडल कर रहा हूँ। क्या यह सभी .pyo और .pyc फ़ाइलों को छोड़ने का एक अच्छा निर्णय है?क्या मैं आरपीएम में .pyo और .pyc फ़ाइलों को छोड़ सकता हूं?

virtenv उदाहरण के भीतर से पोस्ट-इंस्टॉल कार्रवाई में compileall.py को आमंत्रित करने के बजाय मैं क्या करूंगा। क्या यह काम करता है, या यह गड़बड़ चीजें होगा?

नोट: मुझे एहसास है कि मैं एक मशीन पर कोशिश कर सकता हूं, लेकिन ए।) यह मुझे एक निर्णायक उत्तर नहीं देगा कि यह अन्य मशीनों पर काम करेगा या नहीं।) दूसरों के पास एक ही प्रश्न हो सकता है और मैं इसका जवाब नहीं मिला।

उत्तर

3

देखें आप वास्तव में उन्हें छोड़ सकता है - वे या तो उत्पन्न कर रहे हैं (यदि आप लेखन पहुँच है), या .py हर बार जब आप इसे आयात (जो उस समय की लागत) पार्स किया गया है।

लेकिन, अपनी वितरण पर निर्भर करता है, अपने आरपीएम प्रणाली .py फ़ाइलें संकलन के लिए आसान स्क्रिप्त वाले और वितरण, जो कार्य काफी आसान बना देता है पर .pyo और .pyc फ़ाइलों बंडल हो सकता है।

$ rpm --showrc | grep -A 7 py.*_compile 
-14: py3_compile(O) 
find %1 -name '*.pyc' -exec rm -f {} ";" 
python3 -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1 
%{-O: 
find %1 -name '*.pyo' -exec rm -f {} ";" 
python3 -O -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1 
} 
-14: py3_incdir /usr/include/python3.3m 
-- 
-14: py_compile(O) 
find %1 -name '*.pyc' -exec rm -f {} \; 
python -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1 
%{-O: 
find %1 -name '*.pyo' -exec rm -f {} \; 
python -O -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1 
} 
-14: py_incdir %{py_prefix}/include/python%{py_ver} 

I. ई।, आप %py_compile resp डाल डाल सकते हैं। %py3_compile अपने %build सेक्शन में और आपके पास जो चाहिए वह आपके पास है।

लेकिन, जैसा कि कहा गया है, आप उन्हें छोड़ सकते हैं अगर आप उन्हें विभिन्न संस्करण संख्याओं के कई पायथन इंस्टॉलेशन से उपयोग करना चाहते हैं। लेकिन फिर आपको यह सुनिश्चित करना चाहिए कि .pyc और .pyo फ़ाइलें कभी नहीं बनाई गई हैं, क्योंकि यह चीजों को गड़बड़ कर सकती है।

+0

वाह, अच्छा। क्या इस्तेमाल किए गए 'पायथन' को ओवरराइड करने का कोई तरीका है? जैसा कि मैंने अपने प्रश्न में लिखा था, यह 'virtenv' के अंदर है। साइड-नोट: उन्हें छोड़ने का मुख्य कारण पैकेज का परिणामी आकार है। – 0xC0000022L

+0

आप अपने '.rpmrc' या' .rpmmacros' फ़ाइल में निर्दिष्ट मैक्रोज़ को प्रतिस्थापित करके इसे ओवरराइड कर सकते हैं। – glglgl

+0

'--define' स्विच का उपयोग करके स्वयं, क्योंकि पूरे निर्माण चरण को स्क्रिप्ट किया गया है और कुछ परिभाषाओं की गणना की जा रही है। – 0xC0000022L

1

यह तब तक सुरक्षित है जब तक आपके पास .py फ़ाइलें हों। .pyo और .pyc फ़ाइलों को मूल .py फ़ाइलों से उत्पन्न किया गया है।

भी What do the python file extensions, .pyc .pyd .pyo stand for? और If Python is interpreted, what are .pyc files?

+1

धन्यवाद। मुझे पता है * वे * क्या हैं, लेकिन मैं अभी भी आरपीएम स्थापना के बाद उन्हें फिर से उत्पन्न करना चाहता हूं। तो मेरा सवाल यह आपके उत्तर के दायरे से थोड़ा आगे है :) (w.r.t. तथ्य यह है कि मैं 'virtenv' का उपयोग करता हूं जो कुछ नियमों को बदलने लगता है) – 0xC0000022L

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