Jak skompilować plik python?

57

Zacząłem uczyć się języka Python i jestem również nowym użytkownikiem Ubuntu. Muszę znać sposoby kompilacji .pyplików. Próbowałem z poleceniem

python "hello.py"

Jakie są inne sposoby kompilowania Pythona?

Bharath Lakshman
źródło

Odpowiedzi:

58

Dodając do odpowiedzi Bryana, jeśli chcesz po prostu skompilować plik lub kilka plików z terminala, py_compilemoduł można wykonać jako skrypt w następujący sposób:

python -m py_compile fileA.py fileB.py fileC.py ...

Yamaho
źródło
9
Jeśli kompilujesz, ponieważ chcesz prędkości, możesz również dodać -Oflagę, jak python -O -m py_compile …, która „włączy podstawowe optymalizacje”. Usuwa głównie assertinstrukcje i if __debug__kod, więc dla większości kodów nie ma to żadnego wpływu. Zobacz man pythoni „Czym zajmuje się optymalizacja Python…”, aby uzyskać szczegółowe informacje.
Rory O'Kane
26

Pamiętaj również, że nie musisz kompilować .pypliku, aby go uruchomić. Python jest językiem interpretowanym i możesz uruchamiać skrypty bezpośrednio, używając:

python hello.py

Lub #!/usr/bin/env pythonspraw, aby skrypt był wykonywalny, dodając go na górze skryptu, czyniąc plik wykonywalnym za pomocą, chmod +x hello.pya następnie uruchamiając:

./hello.py

Fakt, że Python kompiluje wewnętrznie .pyskrypt do .pycplików kodu bajtowego ze względu na wydajność, jest szczegółem implementacji i jeśli nie masz ku temu silnego powodu, pozwól samemu pytonowi zdecydować, kiedy i czy skompilować.

MestreLion
źródło
Jestem zdezorientowany, dlaczego to działa. Czy interpreter języka Python nie musi być w stanie odczytać skryptu, aby go uruchomić? Jeśli zezwolisz tylko na wykonanie ( chmod +x), w jaki sposób interpreter odczytuje skrypt?
yellow01
@ yellow01: po uruchomieniu skryptu zawierającego „shebang”, tj. pierwsza linia zaczyna się od #!/path/to/interpreter, jądro faktycznie wykonuje to, co tam zadeklarowano, przekazując ścieżkę skryptu jako argument. W moim przykładzie po uruchomieniu ./hello.pywykonuje się to, co jest faktycznie wykonywane /usr/bin/env python ./hello.py. Zobacz en.wikipedia.org/wiki/Shebang_(Unix)
MestreLion
@ yellow01 masz rację, że tłumacz będzie potrzebował uprawnień do odczytu po uruchomieniu przez proces opisany przez MestreLion. Jednak chmod +xprzyznaje wykonanie i nie dotyka istniejących uprawnień, więc prawdopodobnie jest czytelny oprócz tego, że jest teraz wykonywalny.
spectras
11

Sprawdź ten link Kompiluj w Pythonie

Na środku strony mówi o module py_compile, który można zaimportować. Składnia jest następująca:

import py_compile

py_compile.compile("file.py")

Ta metoda kompilacji nie uruchomi modułu tak samo jak uruchomienie pliku pyt.py.py.

Istnieje również metoda, która kompiluje całe drzewo katalogów, ale pozwolę ci sprawdzić link, aby zobaczyć, jak to się wykonuje.

Mam nadzieję że to pomoże.

Bryan
źródło
4

Możesz skompilować skrypty Pythona do kodu binarnego przy użyciu różnych metod, ale odkryłem, że używanie Nuitka jest bardziej wydajne.

Nuitka to kompilator Pythona na C ++, który obsługuje prawie wszystkie wersje Pythona.

Składnia polecenia jest tak prosta, jak

nuitka hello.py

Idź do http://nuitka.net/doc/user-manual.html, aby uzyskać więcej informacji.

salafi
źródło
6
Bardziej wydajny jak? Dlaczego ktoś miałby z niego korzystać?
muru
nuitka jest rzeczywiście bardzo przydatny - na przykład pozwala wysyłać programy w języku Python na komputery, na których nie jest zainstalowany Python. Ale gdy nuitka kompiluje programy w języku Python do kodu maszynowego C ++, można to obejść.
user258532