Dlaczego konwertować PYC na PY?
Głównym powodem jest odzyskiwanie źródła, gdy oryginalny plik .py został usunięty lub nigdy nie został dostarczony wraz z kodem bajtowym. Drugim zastosowaniem jest audyt programów dystrybuowanych wyłącznie jako kod bajtowy. Jest to dekompilacja, a nie czysta konwersja formatu - plik .pyc przechowuje skompilowany kod bajtowy, a oryginalny tekst źródłowy nie jest w nim zachowany.
Jak przekonwertować PYC na PY
decompyle3 FREE
Zainstaluj za pomocą pip install decompyle3 i uruchom decompyle3 twójplik.pyc > odzyskany.py. Obsługuje Python 3.7-3.8.
uncompyle6 FREE
Zainstaluj za pomocą pip install uncompyle6 i uruchom uncompyle6 twójplik.pyc > odzyskany.py. Obsługuje wersje Python od 2.x do 3.8.
pycdc OPEN-SOURCE
Pobierz plik binarny z github.com/zrax/pycdc i uruchom pycdc twójplik.pyc > odzyskany.py. Najlepsza opcja dla Python 3.9 i nowszych, choć dokładność w wersjach 3.11+ jest ograniczona.
O tych formatach
Plik .pyc to skompilowany kod bajtowy Python, który CPython automatycznie buforuje, aby przyspieszyć uruchamianie. Zazwyczaj nie trzeba go otwierać ani modyfikować. Aby go uruchomić, użyj…
Otwórz szczegóły .PYC →Plik .py to plik kodu źródłowego Python - zwykły tekst zawierający program lub skrypt napisany w języku Python. Aby odczytać kod, otwórz go w dowolnym edytorze tekstu. Aby go uruchomić,…
Otwórz szczegóły .PY →Jakość i na co uważać
- Komentarze przepadają bezpowrotnie - kod bajtowy Python ich nie przechowuje; żadne narzędzie nie odzyska ich z pliku
.pycniezależnie od wersji Python. - Dokładność dekompilacji gwałtownie spada w przypadku Python 3.9 i nowszych; pycdc to najlepsza dostępna opcja dla nowszego kodu bajtowego, ale może generować niekompletne wyniki.
- Jeśli plik
.pyczostał zaciemniony (obfuscated), dekompilacja zakończy się błędem lub zwróci pusty wynik; jako rozwiązanie awaryjne poleceniepython3 -m dis twójplik.pycmoże nadal wyświetlić poszczególne instrukcje kodu bajtowego.
Najczęściej zadawane pytania
Skąd mam wiedzieć, która wersja Python skompilowała plik .pyc?
.pyc w folderze __pycache__ mają nazwy typu module.cpython-311.pyc - liczba wskazuje wersję Python, która go skompilowała.Czy docstringi przetrwają dekompilację?
Co jeśli dekompilator zgłasza błędy lub generuje pusty wynik?
.pyc może być zaciemniony lub pochodzić z nieobsługiwanej wersji Python; spróbuj innego narzędzia lub użyj python3 -m dis, aby sprawdzić poszczególne instrukcje kodu bajtowego.