क्या किसी .py फ़ाइल में संकलित .pyc फ़ाइल को विघटित करना संभव है?


178

क्या। Pyc फ़ाइल जो कि .py फ़ाइल से उत्पन्न होती है, से कुछ जानकारी प्राप्त करना संभव है?

जवाबों:


169

Uncompyle6 Python 3.x और 2.7 के लिए काम करता है - अनुशंसित विकल्प, क्योंकि यह सबसे हालिया उपकरण है, जिसका उद्देश्य पहले के कांटे को एकजुट करना और स्वचालित इकाई परीक्षण पर ध्यान केंद्रित करना है। GitHub पेज अधिक जानकारी के है।

  • यदि आप पायथॉन 3.7+ का उपयोग करते हैं, तो आप 3.7 और उच्चतर पर ध्यान केंद्रित करने वाले Uncompyle6 का एक कांटा भी विघटित कर सकते हैं ।
  • जरूरत पड़ने पर इन प्रोजेक्ट्स पर GitHub के मुद्दों को उठाएं - दोनों पायथन संस्करणों की एक श्रृंखला पर यूनिट टेस्ट सूट चलाते हैं

पुराना Uncompyle2 केवल पायथन 2.7 का समर्थन करता है। इसने कुछ समय पहले मेरे लिए .pyc bytecode को .py में विघटित करने के लिए अच्छी तरह से काम किया, जबकि अनपाइक्लिब एक अपवाद के साथ दुर्घटनाग्रस्त हो गया।

इन सभी उपकरणों के साथ, आपको अपना कोड वापस प्राप्त करना चाहिए जिसमें चर नाम शामिल हैं, लेकिन टिप्पणियों के बिना।


7
बहुत बहुत धन्यवाद। मैंने .pyc के बजाय गलती से अपनी .py फ़ाइल हटा दी थी। इसने मुझे इसे फिर से खरोंचने से बचाया।
एवमोहन

21
आप में से उन लोगों के लिए क्योंकि आपने गलती से गलत फ़ाइल को हटा दिया था, मैं स्रोत नियंत्रण की अत्यधिक अनुशंसा करता हूं !
एंड्रयू पामर

30

हां, आप इसे पा सकते हैं, unpyclibजो कि पिपी पर पाया जा सकता है ।

$ pip install unpyclib

आप अपनी .pyc फ़ाइल को विघटित कर सकते हैं

$ python -m unpyclib.application -Dq path/to/file.pyc

20
मैंने यह कोशिश की और यह एक अपवाद के साथ दुर्घटनाग्रस्त हो गया, बिना किसी जटिल कोड (Django settings.py) के साथ एक छोटी सी फ़ाइल पर - unyle2 ने इसके बजाय काम किया। -1 उस कारण से।
रिचवेल

9
यह lib \ साइट-संकुल \ unpyclib \ applcation.py में Python 3.6 के साथ क्रैश हो गया print __copyright- यह printबिना कोष्ठक के पायथन 2.7 संस्करण का उपयोग क्यों कर रहा है?
डेविड चिंग

1
@DavidChing unpyclibकी पहली और आखिरी रिलीज 2009 में हुई थी , यह कहना सुरक्षित है कि यह केवल पायथन 2 केवल कार्यक्रम है।
बोरिस

28

आप आसान पायथन डेकोम्पाइलर की कोशिश कर सकते हैं । यह Decompyle ++ और Uncompyle2 पर आधारित है। यह विघटित अजगर संस्करणों 1.0-3.3 का समर्थन करता है

नोट: मैं उपरोक्त टूल का लेखक हूं।


5
यह अपना काम करता है। अच्छा कार्य। BTW, क्या आपने इस उपकरण को अजगर में लिखा है?
शिंज़ौ

1
मेरे लिए अच्छा काम किया (आसान ड्रैग एंड ड्रॉप)। यह सच है कि एक linux distro अच्छा होगा, लेकिन यह सब एक विंडोज़ बॉक्स खोलने में मुश्किल नहीं है।
ब्रायन जैक्सन

2015 में अंतिम रिलीज़ और ऐसा लगता है कि यह बंद स्रोत है?
बोरिस

13

Decompyle ++ (pycdc) ही एकमात्र ऐसा काम था जो मेरे लिए काम करता था: https://github.com/zrax/pycdc

Decompile Python 2.7 .pyc में सुझाव दिया गया था


1
और यह मेरे लिए उस कोड के लिए काम करता है जिसे पायथन 2.6 के साथ संकलित किया गया था!
डेविड मेर्टेंस

4

जी हां

मैं असंगति 6 डिकंपाइल (यहां तक ​​कि नवीनतम पायथन 3.8.0 का समर्थन करता हूं) का उपयोग करता हूं :

uncompyle6 utils.cpython-38.pyc > utils.py

और मूल अजगर और विघटित अजगर इस तरह दिखते हैं:

pyc असम्बद्ध बर्तन

तो आप देख सकते हैं, ALMOST वही, विघटित प्रभाव बहुत अच्छा है


3

हाँ यह संभव है।

एक पूर्ण ओपन-सोर्स पाइथन (.PYC) डिकम्पॉइलर है, जिसे Decompyle ++ https://github.com/zrax/pycdc/ कहा जाता है।

Decompyle ++ का उद्देश्य संकलित पायथन बाइट-कोड को वैध और मानव-पठनीय पायथन स्रोत कोड में वापस अनुवाद करना है। हालांकि अन्य परियोजनाओं ने विविध सफलता के साथ यह हासिल किया है, Decompyle ++ अद्वितीय है कि यह पायथन के किसी भी संस्करण से बाइट-कोड का समर्थन करना चाहता है।


2
जबकि pycdc अच्छा है, यह सही नहीं है। यदि आप github.com/zrax/pycdc/issues को देखते हैं तो 50 से अधिक व्यक्तिगत प्रकार की समस्याएं हैं जो इसे अपघटन में हैं। यह हालांकि अजगर के 16 या तो रिलीज पर फैला हुआ है, और भाषा और कोड दोनों में काफी बदलाव आया है। यह हो सकता है कि जिन चीजों के लिए आपने प्रयास किया है, आप एक समस्या खोजने में सक्षम न हों। हालांकि, मेरी राय में, किसी चीज़ को "संपूर्ण" के रूप में वर्गीकृत करने के लिए, प्रत्येक संस्करण के लिए पूरे पायथन पुस्तकालय को कहना होगा, इसे विघटित करना होगा, और इसे अपने स्वयं के परीक्षणों को ठीक से पास करना होगा। कोई डिकंपाइलर अभी तक ऐसा नहीं कर सकता है।
चट्टानी

1

पाइप स्थापित करें pycompyle6 का उपयोग करके स्थापित करें

pycompyle6 फ़ाइल नाम। pyc

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.