Apakah mungkin untuk mendekompilasi file .pyc yang dikompilasi menjadi file .py?


Jawaban:


169

Uncompyle6 berfungsi untuk Python 3.x dan 2.7 - opsi yang disarankan karena merupakan alat terbaru, yang bertujuan untuk menyatukan garpu sebelumnya dan berfokus pada pengujian unit otomatis. The Halaman GitHub memiliki rincian lebih lanjut.

  • jika Anda menggunakan Python 3.7+, Anda juga bisa mencoba decompile3 , sebuah garpu dari Uncompyle6 yang berfokus pada 3.7 dan lebih tinggi.
  • lakukan mengangkat masalah GitHub pada proyek-proyek ini jika diperlukan - keduanya menjalankan unit test suites pada berbagai versi Python

Uncompyle2 yang lebih lama hanya mendukung Python 2.7. Ini bekerja dengan baik bagi saya beberapa waktu lalu untuk mendekompilasi bytecode .pyc ke .py, sedangkan unpyclib mengalami crash dengan pengecualian.

Dengan semua alat ini, Anda mendapatkan kode kembali termasuk nama variabel, tetapi tanpa komentar.


7
Terima kasih banyak. Saya tidak sengaja menghapus file .py saya, bukan .pyc. Ini menyelamatkan saya dari keharusan menulis ulang dari awal.
avmohan

20
Bagi Anda di sini karena Anda tidak sengaja menghapus file yang salah, saya sangat merekomendasikan kontrol sumber!
Andrew Palmer

30

Ya, Anda bisa mendapatkannya dengan unpyclibitu dapat ditemukan di pypi .

$ pip install unpyclib

Daripada Anda dapat mendekompilasi file .pyc Anda

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

20
Saya mencoba ini dan itu jatuh dengan pengecualian, pada file yang cukup kecil tanpa kode kompleks (Django settings.py) - uncompyle2 bekerja dengan baik sebagai gantinya. -1 untuk alasan itu.
RichVel

9
Itu jatuh di Python 3.6 di lib \ situs-paket \ unpyclib \ applcation.py dengan print __copyright- mengapa menggunakan versi Python 2.7 printtanpa tanda kurung?
David Ching

1
@DavidChing unpyclibrilis pertama dan terakhir pada tahun 2009 , aman untuk mengatakan itu adalah program hanya Python 2.
Boris

28

Anda dapat mencoba Easy Python Decompiler . Ini didasarkan pada Decompyle ++ dan Uncompyle2. Ini mendukung penguraian versi python 1.0-3.3

Catatan: Saya penulis alat di atas.


5
Itu melakukan tugasnya. Kerja bagus. BTW, apakah Anda menulis alat ini dengan python?
shinzou

1
Bekerja dengan baik untuk saya (drag and drop mudah). Memang benar bahwa distro linux akan menyenangkan, tetapi tidak terlalu sulit untuk membuka kotak windows.
Brian Jackson

Rilis terakhir pada tahun 2015 dan sepertinya sumber tertutup?
Boris


4

Ya .

Saya menggunakan dekompilasi uncompyle6 (bahkan mendukung Python 3.8.0 terbaru):

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

dan python asal dan membandingkan python membandingkan terlihat seperti ini:

Utilitas kompilasi pyc

sehingga Anda dapat melihat, HAMPIR sama, efek dekompilasi SANGAT BAIK .


3

Ya itu mungkin.

Ada dekompiler open-source Python (.PYC) yang sempurna, yang disebut Decompyle ++ https://github.com/zrax/pycdc/

Decompyle ++ bertujuan untuk menerjemahkan kode byte Python yang dikompilasi kembali menjadi kode sumber Python yang valid dan dapat dibaca manusia. Sementara proyek-proyek lain telah mencapai ini dengan keberhasilan yang bervariasi, Decompyle ++ unik karena berupaya mendukung kode byte dari versi Python apa pun.


2
Meskipun pycdc baik, itu tidak sempurna. Jika Anda melihat masalah github.com/zrax/pycdc/isue, ada lebih dari 50 jenis masalah yang ada dalam dekompilasi. Namun ini tersebar di 16 atau lebih rilis python, dan bahasa dan kode telah berubah secara drastis. Mungkin karena hal-hal yang telah Anda coba, Anda belum dapat menemukan masalah. Namun, menurut pendapat saya, untuk mengklasifikasikan sesuatu sebagai "sempurna", orang harus mengambil mengatakan seluruh pustaka Python untuk setiap versi, mendekompilasi, dan membuatnya lulus tes sendiri dengan benar. Tidak ada decompiler yang bisa melakukannya.
berbatu

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.