Konwertuj PYO na PY
Odzyskaj czytelny kod źródłowy Python ze zoptymalizowanego bytecode legacy Python 2.
Jak konwertować pyo do py
- Programowanie
- Brak ocen.
Stare oprogramowanie Python 2 może udostępniać tylko plik .pyo, gdy edytor, system przeglądu kodu lub projekt konserwacyjny wymaga czytelnego źródła .py. Konwersja wymaga dekompilacji, ponieważ plik PYO nie zawiera oryginalnego tekstu źródłowego.
Czym jest format PYO
Plik PYO to zoptymalizowany Python bytecode utworzony przez Python 2, gdy kod jest uruchamiany z opcją -O lub -OO. Python 2 zwykle przechowywał go obok źródła jako module.pyo; Python 3.5 i nowsze usunęły oddzielny format PYO i przechowują zoptymalizowany bytecode jako oznaczone pliki .pyc.
Pliki PYO można znaleźć w zarchiwizowanych aplikacjach Python 2, oprogramowaniu urządzeń wbudowanych oraz starych katalogach instalacyjnych zawierających pliki takie jak __init__.pyo. PYO to skompilowany bytecode dla interpretera Python, a nie skompresowana ani przemianowana kopia oryginalnego pliku .py.
Czym jest format PY
Plik PY to tekstowy kod źródłowy Python, który można otwierać, edytować, przeszukiwać, wersjonować i uruchamiać za pomocą zgodnego interpretera. Jest to format oczekiwany przez edytory kodu źródłowego, repozytoria kodu, lintery i większość narzędzi programistycznych.
Dekompilacja może odtworzyć kod Python przypominający kod wykonywalny, ale zwykle nie może przywrócić komentarzy, oryginalnych odstępów, komentarzy dotyczących kodowania źródła, dokładnego formatowania ani konstrukcji źródłowych usuniętych podczas kompilacji. W bytecode pozostaje wiele nazw, ale nie ma gwarancji, że odpowiadają one nazwom zamierzonym przez autora.
Jak przekonwertować PYO do PY
- Określ wersję bytecode. Rozszerzenie
.pyozwykle wskazuje na Python 2, ale bytecode Python 2.5, 2.6 i 2.7 różni się między sobą. Użyj otaczającej aplikacji, jej dokumentacji lub narzędzia do inspekcji bytecode, aby określić wersję na podstawie nagłówka pliku. Dekompilator musi obsługiwać tę wersję. - Zachowaj oryginał. Pracuj na kopii i unikaj uruchamiania niezaufanego pliku PYO. Jeśli plik zawiera zastrzeżony kod, nie przesyłaj go do usługi zewnętrznej bez upoważnienia.
- Zainstaluj lokalny dekompilator.
uncompyle6to często używana opcja open source dla bytecode Python; zainstaluj ją w odizolowanym środowisku za pomocąpython -m pip install uncompyle6.pycdc, zbudowane z jego oficjalnego repozytorium, to kolejna lokalna opcja. Przed wyborem sprawdź obsługiwane przez każdy projekt wersje bytecode. - Uruchom dekompilator. Na przykład
uncompyle6 -o recovered module.pyozapisuje odzyskane pliki w katalogurecovered. Niektóre wydania lub wrappery mogą odrzucać przyrostek.pyo, mimo że plik zawiera standardowy bytecode Python 2. W takim przypadku skopiuj go domodule.pyci spróbuj ponownie; zmiana nazwy zmienia tylko nazwę pliku, a nie bytecode. - W razie potrzeby przechwyć standardowe wyjście. Jeśli narzędzie wyświetla źródło zamiast tworzyć plik, użyj
uncompyle6 module.pyo > module.py. Sprawdź wynik przed zastąpieniem jakiegokolwiek istniejącego źródła. - Zweryfikuj wynik za pomocą pasującego interpretera. Najpierw sprawdź wynik Python 2 za pomocą odpowiedniego interpretera Python 2, na przykład
python2 recovered/module.py, w kontrolowanym środowisku. Ręcznie popraw błędy dekompilatora, a następnie przenieś kod do Python 3 za pomocą narzędzi takich jak2to3, tam gdzie jest to właściwe; automatyczne przenoszenie nie zastępuje testowania.
Żadna zwykła zmiana nazwy, ekstraktor archiwów ani operacja eksportu tekstu nie konwertuje PYO do kodu źródłowego. Renomowane konwertery online zasadniczo nie są praktycznym rozwiązaniem dla tego formatu: obsługa zależy od dokładnej wersji bytecode Python, a przesłanie zastrzeżonego oprogramowania ujawnia jego kod. Lokalny dekompilator jest bezpieczniejszy i zwykle bardziej niezawodny.
Ograniczenia jakości i zgodności
Dekompilacja jest przybliżeniem. Komentarze, formatowanie, składnia występująca wyłącznie w źródle i część pierwotnej organizacji zostają utracone. Kompilacja Python 2 z opcją -O usuwa instrukcje asercji; -OO usuwa również docstringi. Odzyskany plik może więc różnić się zachowaniem lub dokumentacją, nawet jeśli działa.
Sprawdź wcięcia, obsługę wyjątków, generatory, dekoratory, kodowania ciągów znaków, importy i przepływ sterowania. Dekompilator może wygenerować błędy składni lub subtelnie niepoprawny kod, jeśli nie obsługuje w pełni danej wersji bytecode albo konkretnej konstrukcji kompilatora.
Plik PYO może również zależeć od modułów pakietu, plików danych, rozszerzeń natywnych, zmiennych środowiskowych i konkretnego katalogu roboczego. Pomyślna konwersja tworzy tekst źródłowy, a nie samodzielny zamiennik aplikacji.
Porównanie formatu PYO z PY
Jak formaty PYO i PY wypadają w porównaniu pod względem najważniejszych cech dla tej konwersji.
| Cecha | .PYO Python Optimized Bytecode | .PY Python source file |
|---|---|---|
| Czytelny tekstowo | Nie | Tak |
| Formatowanie tekstu | Brak | Podstawowy |
| Obrazy | Nie | Nie |
| Dalsza edycja | Nie do bezpośredniej edycji | Łatwy |
| Otwiera się w przeglądarce internetowej | Nie | Nie |
| Typowy rozmiar pliku | Bardzo mały | Mały |
| Otwarty standard | Nie | Tak |
| Najlepszy do | Osadzanie w aplikacjach | Edycja i postprodukcja |
| Wprowadzono | — | 1991 |
| Twórca | Python Software Foundation | Python Software Foundation |
| Typ MIME | — | text/x-python |
Baza danych obecnie nie zawiera żadnych bezpośrednich linków do konwerterów plików pyo.