Derlenmiş bir .pyc dosyasını bir .py dosyasına dönüştürmek mümkün mü?


Yanıtlar:


169

Uncompyle6 , önceki çatalları birleştirmeyi ve otomatik birim testine odaklanmayı amaçlayan en yeni araç olan Python 3.x ve 2.7 için önerilir. GitHub sayfasında daha fazla ayrıntı vardır.

  • Python 3.7+ kullanıyorsanız, aynı zamanda Uncompyle6'nın bir çatalı olan 3.7 ve üstüne odaklanan decompile3'ü de deneyebilirsiniz .
  • gerekirse bu projelerde GitHub sorunlarını gündeme getirin - her ikisi de bir dizi Python sürümünde birim test paketlerini çalıştırın

Eski Uncompyle2 yalnızca Python 2.7'yi destekler. Bu, bir süre önce .pyc bayt kodunu .py'ye dönüştürmek benim için iyi sonuç verirken, unpyclib bir istisna ile çöktü.

Tüm bu araçlarla, kodunuzu değişken adları da dahil olmak üzere geri alırsınız, ancak yorum yapmazsınız.


7
Çok teşekkürler. Yanlışlıkla .pyc yerine .py dosyamı silmiştim. Bu beni sıfırdan yeniden yazmak zorunda kalmadan kurtardı.
avmohan

21
Yanlış dosyayı sildiğiniz için buradakileriniz için, kaynak kontrolünü şiddetle tavsiye ederim!
Andrew Palmer

30

Evet, bunu elde edebilirsiniz unpyclibbu konuda bulunabilir pypi .

$ pip install unpyclib

Daha sonra .pyc dosyanızı kodabilirsiniz

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

20
Bunu denedim ve hiçbir karmaşık kod (Django settings.py) ile oldukça küçük bir dosya üzerinde, bir istisna dışında çöktü - uncompyle2 yerine iyi çalıştı. -1 bu nedenle.
RichVel

9
Lib \ site-Packages \ unpyclib \ applcation.py ile Python 3.6'da çöktü print __copyright- neden printparantez olmadan Python 2.7 sürümünü kullanıyor ?
David Ching

1
@DavidChing'in unpyclibilk ve son sürümü 2009'da , sadece Python 2 programı olduğunu söylemek güvenli.
Boris

28

Easy Python Decompiler'ı deneyebilirsiniz . Decompyle ++ ve Uncompyle2 tabanlı. 1.0-3.3 python sürümlerini decompiling destekler

Not: Yukarıdaki aracın yazarıyım.


5
İşini yapıyor. İyi iş. BTW, bu aracı python'a yazdınız mı?
shinzou

1
Benim için iyi çalıştı (kolay sürükle ve bırak). Linux dağıtımının iyi olacağı doğrudur, ancak bir pencere kutusunu açmak o kadar da zor değildir.
Brian Jackson

2015'in son sürümü ve kapalı kaynak gibi görünüyor mu?
Boris


4

Evet .

Ben uncompyle6 decompile kullanıyorum (hatta en son Python 3.8.0 desteği):

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

ve köken python ve karşılaştırmalı python karşılaştırması şöyle:

derleme araçları

böylece görebilirsiniz, ALMOST aynı, koda etkisi çok iyi .


3

Evet mümkün.

Decompyle ++ adlı mükemmel bir açık kaynaklı Python (.PYC) kod çözücü var https://github.com/zrax/pycdc/

Decompyle ++ derlenmiş Python bayt kodunu geçerli ve insan tarafından okunabilir Python kaynak koduna çevirmeyi amaçlamaktadır. Diğer projeler bunu çeşitli başarılarla başarmış olsa da, Decompyle ++, Python'un herhangi bir sürümünden bayt kodunu desteklemeye çalışması açısından benzersizdir.


2
Pycdc iyi olsa da, mükemmel değildir. Github.com/zrax/pycdc/issues adresine bakarsanız, ayrıştırmada 50'den fazla sorun vardır. Ancak bu, python'un 16 sürümüne yayılmıştır ve hem dil hem de kod büyük ölçüde değişmiştir. Denediğin şeyler için bir sorun bulamamış olabilirsin. Ancak, benim görüşüme göre, bir şeyi "mükemmel" olarak sınıflandırmak için, her sürüm için tüm Python kütüphanesini söylemek, koda etmek ve kendi testlerini düzgün bir şekilde geçmesini sağlamak gerekir. Henüz hiçbir dekompler bunu yapamaz.
kayalık

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.