2012-07-13 9 views
9

szukam w kompilacji całkiem dużego zestawu modułów i paczek Pythona do pyo. Wiem, że jest to możliwe przez ustawienie zmiennej środowiskowej PYTHONOPTIMIZE lub przez podanie -O przy uruchomieniu. Chciałbym wymusić pyo zamiast pyc, aby uzyskać możliwie najmniejszy ślad. Aby to zrobić w moim module wdrożenia, muszę utworzyć skrypt otoki, który uruchamia właściwy skrypt z opcją -O, ponieważ zmienna środowiskowa musi zostać określona przed uruchomieniem interpretera.Kompilowanie plików .py do .pyo bez uciekania się do skryptu otoki

Czy istnieje sposób obejścia tego i wymuszenia programowego tworzenia pyo?

poważaniem, Thorsten

Odpowiedz

17

Do skompilować wszystkie moduły wcześniej, uruchom następujące polecenie:

python -O -m compileall /path/to/your/files 

python compileall module dba o kompilacji The -O switch sprawia, że ​​wyjściowe pliki .pyo.

Jednak nie można zmusić Pythona do nich korzystać, chyba że przełącznik -O jest podana dla każdego biegu lubPYTHONOPTIMIZE environment var jest ustawiony.

Należy zauważyć, że wszystkie flagi -O powodują wyłączenie instrukcji assert i ustawienie flagi __debug__ na False (a Python zoptymalizuje testy). Podaj -OO i docstrings są odrzucane. Nie powodują one znacznej różnicy prędkości ani oszczędności miejsca, chyba że używałeś zbyt dużych rozmiarów docstruktu lub bardzo wolnego kodu debugowania.

Patrz: What does Python optimization (-O or PYTHONOPTIMIZE) do?

+0

Dzięki za odpowiedź, ale jak wskazano powyżej wiem przełącznika i chciałby, aby tego uniknąć. Powodem jest to, że jest to narzędzie do wdrażania i chcę uniknąć przypadkowego wdrożenia przez użytkowników dwóch różnych wersji (pyc i pyo) tego samego pliku. Obecnie robię to zawijając wywołanie python.exe -O w skrypcie python przez os.system. To działa, ale jest nieco dziwne, więc zastanawiałem się, czy mogę się tego pozbyć. –

+0

Byłoby miło móc sterować nim programowo (łatwiej) ... – martineau

+0

"Zwróć uwagę, że wszystkie flagi -O powodują wyłączenie instrukcji assert Określić -OO i docstrings są opuszczone.Nie powodują one dużej różnicy prędkości lub oszczędność miejsca. " <- To naprawdę zależy od tego, ile masz instrukcji 'assert' i' if __debug__', prawda? Wiesz, co mówią o założeniach. – DylanYoung

Powiązane problemy