2012-06-06 10 views
7

बस Mercurial का उपयोग शुरू किया। वाह, अच्छा आवेदन। मैंने अपनी डेटाबेस फ़ाइल को कोड निर्देशिका से बाहर ले जाया, लेकिन मैं .pyc फ़ाइलों के बारे में सोच रहा था। मैंने उन्हें प्रारंभिक प्रतिबद्धता में शामिल नहीं किया था। .hgignore फ़ाइल के बारे में दस्तावेज़ में *.pyc को बाहर करने के लिए एक उदाहरण शामिल है, इसलिए मुझे लगता है कि मैं सही रास्ते पर हूं।पीईसी फाइलों के साथ क्या करना है जब Django या अजगर Mercurial के साथ प्रयोग किया जाता है?

मैं सोच रहा हूं कि जब मैं किसी पुराने फाइलसेट पर वापस रोल करने का निर्णय लेता हूं तो क्या होता है। क्या मुझे तब सभी .pyc फ़ाइलों को हटाने की आवश्यकता होगी? मैंने इस मुद्दे के बारे में स्टैक ओवरफ़्लो पर कुछ प्रश्न देखे, जिसमें एक सज्जन भी शामिल था जो पुराने .pyc फ़ाइलों का उपयोग किया जा रहा था। इस के आसपास मानक तरीका क्या है?

+0

क्या आप लिनक्स के तहत Mercurial का उपयोग करते हैं? और क्या आप कमांड लाइन 'एचजी' ऐप या किसी प्रकार का जीयूआई ऐप इस्तेमाल करते हैं? – Kirill

+1

मैं पीईसी सिरदर्द से पूरी तरह से बचने के लिए विकास के दौरान PYTHONDONTWRITEBYTECODE को सेट करना पसंद करता हूं। – georg

+0

-> किरिल: मैं अपने चिकित्सा अभ्यास के लिए डीजेगो वेब विकास के लिए मैकोज़ एक्स के तहत मर्कुरियल का उपयोग कर रहा हूं। यह देखने में मजेदार है कि फाइलें आती हैं और जीयूआई में जाती हैं जब कमांड लाइन एचजी ऐप अपने जादू का काम करता है। -> thg435: PYTHONDONTWRITEBYTECODE विकल्प को इंगित करने के लिए धन्यवाद। – kd4ttc

उत्तर

13

ms4py के जवाब में उल्लेख किया है, * .pyc फ़ाइलें जो मक्खी पर पुनर्जीवित किया जाएगा संकलित कर रहे हैं। एक परियोजना वितरित करते समय आप इन्हें शामिल नहीं करना चाहेंगे।

हालांकि, यदि ऐसा होता है तो आपके पास मॉड्यूल होते हैं जो आपके द्वारा वापस रोल रोल करते समय मौजूद होते हैं और * .pyc फ़ाइलों को चारों ओर झूठ बोल दिया जाता है, अजीब बग्स दिखाई दे सकते हैं क्योंकि मूल पाइथन फ़ाइल मौजूद नहीं है, भले ही पीईसी फाइलें निष्पादित की जा सकें अब और। इस परियोजना में ऐप्स जोड़ने और हटाने और गिट के साथ शाखाओं को स्विच करते समय इसने मुझे Django में कुछ बार काट दिया है।

चीजों को साफ करने के लिए, आप आप परियोजना की निर्देशिका में निम्नलिखित शेल कमांड चलाकर अपने प्रोजेक्ट की निर्देशिका में हर संकलित फ़ाइलें हटा सकते हैं:

find . -name '*.pyc' -exec rm {} \; 
+8

अधिकतर 'ढूंढ' के बजाय '-delete' का समर्थन भी करता है '-exec आरएम {} \;' '। – Dougal

+1

यदि आपका कोड बेस बग फ्री है तो यह समस्या डिफ़ॉल्ट Mercurial वर्कफ़्लो में नहीं होती है (क्योंकि आप कभी भी * .pyc से आयात नहीं करते हैं जिसमें कोई संबंधित * .py नहीं है)। – schlamar

+1

ठीक है, तो ऐसा लगता है कि करने के लिए सही चीज अंतराल पर 'hg प्रतिबद्ध' है। यदि वापस रोलिंग, 'ढूंढें' चलाएं। एक विकल्प के रूप में रोलबैक के बाद -नाम '* .pyc' -delete'। Mercurial से सामान्य रूप से * .pyc फ़ाइलों को बाहर करना अच्छा होता है। – kd4ttc

0

निश्चित रूप से यदि आपके पास एक ही मॉड्यूल पायथन के पुराने संस्करण से .pyc फ़ाइल है, तो इसका उपयोग होगा। कई बार मैंने सोचा है कि मेरा कार्यक्रम मेरे द्वारा किए गए परिवर्तनों को प्रतिबिंबित क्यों नहीं कर रहा था, और मुझे एहसास हुआ क्योंकि मेरे पास पुरानी पीईसी फाइलें थीं।

यदि इसका मतलब है कि .pyc आपके वर्तमान संस्करण को प्रतिबिंबित नहीं कर रहे हैं तो हाँ आपको सभी .pyc फ़ाइलों को हटाना होगा।

आप लिनक्स पर हैं, तो आप कर सकते हैं find . -name *.pyc -delete

+2

यह प्रश्न का उत्तर कैसे देता है? ओपी पहले ही वीसीएस में '.pyc' को अनदेखा करने का उल्लेख करता है। –

+0

जैसा कि मैं सवाल से समझता हूं, @ kd4ttc पहले से ही यह कर चुका है। – Kirill

5

आमतौर पर आप सुरक्षित हैं, क्योंकि *.pyc पुनर्जीवित कर रहे हैं इसी *.py इसकी सामग्री को बदल सकते हैं।

यदि आप *.py फ़ाइल हटाते हैं तो यह समस्याग्रस्त है और आप अभी भी दूसरी फ़ाइल में इसे आयात कर रहे हैं। इस मामले में आप *.pyc फ़ाइल से आयात कर रहे हैं यदि यह मौजूद है। लेकिन यह आपके कोड में एक बग होगा और वास्तव में आपके Mercurial वर्कफ़्लो से संबंधित नहीं है।

निष्कर्ष: हर प्रसिद्ध अजगर पुस्तकालय उनके *.pyc फ़ाइलों अनदेखी कर रहा है, बस कर;)

+1

मैं सहमत हूं। अधिकांश भाग के लिए, चीज़ें "बस काम करें"। अगर आपको अपने प्रोजेक्ट से अजीब व्यवहार मिलता है (कोड चल रहा है जिसे आप जानते हैं * अब नहीं है, उदाहरण के लिए), तो अपनी * .pyc फ़ाइलों को हटाएं। अन्यथा, इसके बारे में चिंता मत करो। –

+0

यदि आप मॉड्यूल को हटा रहे हैं लेकिन अभी भी उन्हें आयात कर रहे हैं, तो पुराने .pyc फ़ाइल को लोड करने के बजाय ImportError की अपेक्षा करते हुए, शायद यह एक संकेत है कि आप कुछ अजीब कर रहे हैं ... – geoffspear

3

एक अधिक सामान्य समाधान के लिए, तो मर्क्युरियल खुद के बारे में पूछना जो फ़ाइलें यह ध्यान नहीं देता:

+०१२३५१६४१०६१:

$ hg status --ignored 

आप xargs उपभोग के लिए उत्पादन सुरक्षित बना सकते हैं

$ hg status --ignored --no-status -0 | xargs -0 -delete 

(-0 नाम में रिक्त स्थान वाली फ़ाइलों को संभालने के लिए महत्वपूर्ण है।) आप एक के बाद अद्यतन हुक के रूप में इस स्थापित कर सकते हैं:

$ hg purge --all 

दोनों ट्रैक न किए गए और नजरअंदाज कर दिया फ़ाइलों को हटाने जाएगा:

[hooks] 
post-update = hg status --ignored --no-status -0 | xargs -0 -delete 

अंत में, मर्क्युरियल एक purge extension कि कुछ ऐसा ही साथ आता है। यदि आप अनचाहे फ़ाइलों को खोने के ठीक हैं, तो वह आदेश शायद आपके लिए सबसे आसान है, विशेष रूप से क्योंकि यह विंडोज़ पर भी काम करता है जहां xargs आने के लिए मुश्किल हो सकती है।

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