Có thể dịch ngược tệp .pyc đã biên dịch thành tệp .py không?


Câu trả lời:


169

Uncompyle6 hoạt động cho Python 3.x và 2.7 - tùy chọn được đề xuất là công cụ gần đây nhất, nhằm mục đích thống nhất các nhánh trước đó và tập trung vào kiểm tra đơn vị tự động. Các trang GitHub có thêm chi tiết.

  • nếu bạn sử dụng Python 3.7+, bạn cũng có thể thử dịch ngược3, một nhánh của Uncompyle6 tập trung vào 3.7 trở lên.
  • làm tăng các vấn đề GitHub trên các dự án này nếu cần - cả hai đều chạy bộ thử nghiệm đơn vị trên một loạt các phiên bản Python

Uncompyle2 cũ hơn chỉ hỗ trợ Python 2.7. Điều này đã làm việc tốt với tôi một thời gian trước đây để dịch ngược mã byte .pyc thành .py, trong khi unpyclib bị lỗi với một ngoại lệ.

Với tất cả các công cụ này, bạn lấy lại mã của mình bao gồm tên biến, nhưng không có nhận xét.


7
Cảm ơn rất nhiều. Tôi đã vô tình xóa tập tin .py của tôi thay vì .pyc. Điều này đã cứu tôi khỏi phải viết lại từ đầu.
avmohan

20
Đối với những người bạn ở đây vì bạn vô tình xóa các tập tin sai, tôi đánh giá cao đề nghị kiểm soát nguồn!
Andrew Palmer

30

Vâng, bạn có thể lấy nó với unpyclibcái đó có thể tìm thấy trên pypi .

$ pip install unpyclib

Hơn bạn có thể dịch ngược tệp .pyc của bạn

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

20
Tôi đã thử điều này và nó đã bị lỗi với một ngoại lệ, trên một tệp khá nhỏ không có mã phức tạp (Django settings.py) - thay vào đó, unsompyle2 hoạt động tốt. -1 vì lý do đó.
RichVel

9
Nó bị lỗi trong Python 3.6 trong lib \ site-gói \ unpyclib \ applcation.py với print __copyright- tại sao nó lại sử dụng phiên bản Python 2.7 printmà không có dấu ngoặc đơn?
David Ching

1
Bản unpyclibphát hành đầu tiên và cuối cùng của @DavidChing là vào năm 2009 , có thể nói đây là chương trình chỉ dành cho Python 2.
Boris

28

Bạn có thể thử Easy Python Decompiler . Nó dựa trên Decompyle ++ và Uncompyle2. Nó hỗ trợ dịch ngược các phiên bản python 1.0-3.3

Lưu ý: Tôi là tác giả của công cụ trên.


5
Nó làm công việc của nó. Làm tốt lắm. BTW, bạn đã viết công cụ này bằng python?
shinzou 13/03/2015

1
Làm việc tốt cho tôi (dễ dàng kéo và thả). Đúng là một bản phân phối linux sẽ rất hay, nhưng nó không quá khó để mở một hộp windows.
Brian Jackson

Bản phát hành cuối cùng vào năm 2015 và có vẻ như đó là nguồn đóng?
Boris


4

.

Tôi sử dụng uncompyle6 dịch ngược (thậm chí hỗ trợ mới nhất Python 3.8.0):

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

và trăn gốc và trăn dịch ngược so sánh trông như thế này:

dụng cụ không biên dịch pyc

để bạn có thể thấy, cũng giống như vậy, hiệu ứng dịch ngược là RẤT TỐT .


3

Vâng, nó là có thể.

Có một trình dịch ngược Python (.PYC) mã nguồn mở hoàn hảo, được gọi là Decompyle ++ https://github.com/zrax/pycdc/

Decompyle ++ nhằm mục đích dịch mã byte Python đã biên dịch thành mã nguồn Python hợp lệ và có thể đọc được. Trong khi các dự án khác đã đạt được điều này với thành công khác nhau, Decompyle ++ là duy nhất ở chỗ nó tìm cách hỗ trợ mã byte từ bất kỳ phiên bản Python nào.


2
Trong khi pycdc là tốt, nó không hoàn hảo. Nếu bạn xem github.com/zrax/pycdc/issues, có hơn 50 loại vấn đề riêng lẻ mà nó gặp phải khi dịch ngược. Tuy nhiên, điều này được lan truyền trong 16 bản phát hành của python và cả ngôn ngữ và mã đã thay đổi mạnh mẽ. Có thể là đối với những điều bạn đã thử, bạn không thể tìm thấy một vấn đề. Tuy nhiên, theo tôi, để phân loại thứ gì đó là "hoàn hảo", người ta sẽ phải nói toàn bộ thư viện Python cho mỗi phiên bản, dịch ngược nó và để nó vượt qua các bài kiểm tra của chính nó. Không có dịch ngược có thể làm điều đó chưa.
đá

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.