βΉοΈ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 0.6 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://habr.com/ru/companies/numdes/articles/581374/ |
| Last Crawled | 2026-03-23 11:08:10 (18 days ago) |
| First Indexed | 2023-05-09 06:49:44 (2 years ago) |
| HTTP Status Code | 200 |
| Meta Title | ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Python / Π₯Π°Π±Ρ |
| Meta Description | ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π° Python ΠΈ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ / Π΅Ρ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΡ. Π Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ ,... |
| Meta Canonical | null |
| Boilerpipe Text | ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π° Python ΠΈ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ / Π΅ΡΒ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΡ. Π Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΡΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΡΡΠΏΠ΅Ρ ΠΊΡΡΡΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΠΈ Ρ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ, ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ
ΠΎΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π±ΡΠ°Π½Π½ΡΠΌ.
ΠΠΎ-Π²ΡΠΎΡΡΡ
, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ - Ρ
ΠΎΡΠ΅ΡΡΡ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, ΡΡΠΎ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊ ΡΠΏΡΠ°Π²ΠΈΡΡΡ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Python ΠΈ Π²ΡΠ΅Ρ
Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ°. ΠΡΠ»ΠΎ Π±Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Ρ
ΠΎΡΠ΅ΡΡΡ,Β ΡΡΠΎΠ±Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π² ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
Π Π²ΠΎΡ ΡΡΡ Π½Π°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python-ΠΊΠΎΠ΄. ΠΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ Π ΡΡΠ»Π°Π½, Ρ ΡΡΠ°ΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«Π¦ΠΈΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β». Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
.
AOT/JIT
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ β ΡΡΠΎ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠ°Ρ: ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ
Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π±Π»ΠΈΠ·ΠΊΠΎΠΌΒ ΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, ΠΈΠ»ΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΈ ΡΠ±ΠΎΡΠΊΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ (ahead-of-time)
β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ (just-in-time)
β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° (Π° ΡΠΎΡΠ½Π΅Π΅, Π±Π»ΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ) ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· - ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅.Β
ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅Π»Π΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
pyperfomance
. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, pyperfomance Π½Π΅ ΠΏΠΎΠ΄ΠΎΡΠ΅Π» Π΄Π»Ρ Cython ΠΈ Pythran, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ°. Π£ΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Cython Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ, Π° Pythran Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ. ΠΠ»Ρ Π½ΠΈΡ
Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΡΠ»Π° ΠΏΠΈ:
def approximate_pi(n):
step = 1.0 / n
result = 0
for i in range(n):
x = (i + 0.5) * step
result += 4.0 / (1.0 + x * x)
return step * result
ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ Intel Core i7 10510U. ΠΠ° CPython 3.9.7 Π²ΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΏΠΈ Π΄ΠΎ 100.000.000 Π·Π½Π°ΠΊΠ° Π·Π°Π½ΡΠ»ΠΎ 5.82 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Python
PyInstaller
PyInstaller ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Python Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² Windows, GNU / Linux, Mac OS X, FreeBSD, Solaris ΠΈ AIX.Β
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· pip:
pip install pyinstaller
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
pyinstaller <ΠΈΠΌΡ_ΡΠ°ΠΉΠ»Π°>.py
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΎ:
*.spec
β ΡΠ°ΠΉΠ» ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡΠΈΡ
ΡΠ±ΠΎΡΠΎΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ .dll ΠΈ .so ΡΠ°ΠΉΠ»ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² runtime-Π° Python);
build/
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°;
dist/
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
Π‘Π±ΠΎΡΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
--name
β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ);
--onefile
β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠ°ΠΏΠΊΠ° Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»);
--hidden-import
β ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ PyInstaller Π½Π΅ ΡΠΌΠΎΠ³ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ;
--add-data
β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ±ΠΎΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ
;
--add-binary
β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ±ΠΎΡΠΊΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ²;
--exclude-module
β ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈΠ· ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°;
--key
β ΠΊΠ»ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ AES256. ΠΠ°, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
Pyinstaller Extractor (.exe β .pyc)
ΠΈ
uncompile6 (.pyc β .py)
.Β ΠΠ»Ρ ΡΠΊΡΡΡΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Python Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
Π£ PyInstaller Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Python 3.5β3.9. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ, Π½ΠΎ Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΡΠΎΡΡΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Ρ. Π΅. Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΠ‘ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ glibc, Ρ. Π΅. Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΠ‘.
PyInstaller Π·Π½Π°Π΅Ρ ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
Python-ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
ΠΈ ΡΠΌΠ΅Π΅Ρ ΠΈΡ
ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠΎ Π½Π΅ ΠΎ Π²ΡΠ΅Ρ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ
uvicorn
ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΉΠ», ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° pyinstaller. ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ
Π·Π΄Π΅ΡΡ
.
Cython
Cython - ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Cython. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ΄ Π½Π° Python ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² Π‘ ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ CPython. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
Π‘ΡΠ°Π²ΠΈΡΡΡ Cython ΡΠ΅ΡΠ΅Π· pip:
pip install Cython
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΡΠ»Π° ΠΏΠΈ:
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
def approximate_pi(int n):
cdef float step
cdef float result
cdef float x
step = 1.0 / n
result = 0.0
for i in range(n):
x = (i + 0.5) * step
result += 4.0 / (1.0 + x * x)
return step * result
Cython β C:
cython -2Β pi_approximater.pyx -o pi_approximater.c
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π‘-ΡΠ½ΡΠΉ ΠΊΠΎΠ΄:
gcc -g -O2 -shared -o pi_approximater.so pi_approximater.c python-config --includes --ldflags -fPIC
Π Π·Π°ΠΌΠ΅ΡΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΡ Π½Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅:
3,66 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
Π ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ? Π’ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΠΈ. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ±ΠΎΡΠΊΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» build.py:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("bench_cython.pyx"),
)
ΠΠ°ΠΏΡΡΡΠΈΠΌ:
python build.py build_ext β-inplace
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½
.so/.dll
ΡΠ°ΠΉΠ».
Nuitka
Nuitka ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Python Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python-ΠΊΠΎΠ΄ Π² Π‘ Π΄Π»Ρ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π Π°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Python (2.6, 2.7, 3.3 - 3.9).
Π‘ΡΠ°Π²ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· pip:
pip install nuitka
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
python -m nuitka --follow-import some_program.py
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ:
python -m nuitka --module some_module.py
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°:
python -m nuitka --module some_package --include-package = some_package
Pythran
Pythran β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Python, ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΡΡΠΈΠΉ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π½Π°ΡΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ SIMD. ΠΠ½ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ Python-ΠΊΠΎΠ΄, Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π² C++. ΠΠΎ Π²Π΅ΡΡΠΈΠΈ 0.9.5 (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ) Pythran ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π» Python 3 ΠΈ Python 2.7. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Python 3.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
pip install pythran
ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ»
<ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°>.so
:
pythran <ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°>.py
Pythran ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°:
Top level statements can only be assignments, strings,functions, comments, or imports
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
#pythran export approximate_pi(int)
def approximate_pi(n):
step = 1.0 / n
result = 0
for i in range(n):
x = (i + 0.5) * step
result += 4.0 / (1.0 + x * x)
return step * result
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ Π²ΡΠ΄Π°Π΅Ρ 0,00007 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
cx-Freeze
cx-Freeze β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Python Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ. cx_Freeze - ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΉ. ΠΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Python 3.5.2 ΠΈ Π²ΡΡΠ΅.
Π‘ΡΠ°Π²ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pip:
pip install cx_Freeze
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
cxfreeze <ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°>.py
Π‘Π±ΠΎΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
-h
,
--help
- ΡΠΏΡΠ°Π²ΠΊΠ°;
-O
- ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ PYTHONOPTIMIZE;
-c
,
--compress
- ΡΠΆΠ°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Π² zip-ΡΠ°ΠΉΠ»Π°Ρ
;
-s
,
--silent
- Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ;
--target-dir
=DIR,
--install-dir
=DIR - ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
import sys
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base)])
Π‘Π±ΠΎΡΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
Β
python setup.py build
JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Python
JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΡΡΠ²Π°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», Π½ΠΎ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
PyPy
PyPy - ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python 2.7 ΠΈ Python 3.7. ΠΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° RPython ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ:
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ΄Π° Python ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ;
ΠΎΡΠ΅Π½ΡΠΈΠΊ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ΄Π° Python;
ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅Π΅ Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Python, Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
PyPy ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python, Π²ΠΊΠ»ΡΡΠ°Ρ NumPy.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ (ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ CPython):
Π‘ΠΊΠΎΡΠΎΡΡΡ.
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ
ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Python, PyPy ΠΌΠΎΠΆΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π²Π°Ρ ΠΊΠΎΠ΄.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Python, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΡΡΠΈ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π½ ΠΠ± ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅), ΠΌΠΎΠ³ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ°, ΡΠ΅ΠΌ Π² CPython. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄Π΅ΡΠ°Π»Π΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π²ΡΡΠ΅, ΡΠ΅ΠΌ Ρ CPython.
Π‘ΠΊΠ°ΡΠ°ΡΡ PyPy ΠΌΠΎΠΆΠ½ΠΎ Ρ
Π·Π΄Π΅ΡΡ
. ΠΠΎΡΠ»Π΅ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ PyPy Π³ΠΎΡΠΎΠ² ΠΊ Π·Π°ΠΏΡΡΠΊΡ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π°ΡΡ
ΠΈΠ²Π°. ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ PyPy Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» pypy Π²
/usr/local/bin
. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
pyenv
.
PyPy ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Mac, Linux (Π½Π΅ Π²ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Ρ) ΠΈΠ»ΠΈ Windows.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ PyPy Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
python3
(ΠΊΠ°ΠΊ c ΠΏΠΎΠΌΠΎΡΡΡ CPython) Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
pypy3
:
Β
pypy3 something.py
Pyston
Pyston - ΡΡΠΎ ΡΠΎΡΠΊ CPython 3.8.8 Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ². ΠΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
pyenv
.
Π Pyston ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ CPython, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ C API Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ. Π‘ΡΠ΅Π΄ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΎΡΠ»ΠΈΡΠΈΠΉ Pyston ΠΎΡ CPython ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΡΠΈΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
DynASM JIT
ΠΈ
inline-ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
.Β
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ°ΠΊ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ 5 ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Python. ΠΠ»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ, Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ.
PyInstaller
Cython
Nuitka
Pythran
cx-Freeze
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΡ
ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ²
+
-
+
-
+
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ python-ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ CPython
-
+
+
+
+
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Python
+
-
+
-
+
Π’ΡΠ°Π½ΡΠ»ΡΡΠΈΡ Python Π² Π‘/C++
-
+
+
+
-
ΠΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ
+
+
+
+
+
ΠΡΠΎΡΡΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ
-
-
-
-
-
Π‘ΡΠ΅Π΄Π½Π΅Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π²Π΅ΡΡΠΈΡΡ
CPython, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°Ρ
Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ
AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
http://www.pyinstaller.org/
https://cython.org/
https://nuitka.net/
https://github.com/serge-sans-paille/pythran
https://cx-freeze.readthedocs.io/en/latest/
https://github.com/pyston/pyston
https://www.pypy.org/ |
| Markdown | [ΠΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ](https://habr.com/ru/articles/)
[ΠΠΎΠΉΡΠΈ](https://habr.com/kek/v1/auth/habrahabr/?back=/ru/companies/numdes/articles/581374/&hl=ru)
[](https://habr.com/ru/companies/numdes/profile/)
[Π¦ΠΈΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://habr.com/ru/companies/numdes/profile/)
ΠΠ°ΡΠΊΠ° ΠΈ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ
30
ΠΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΈ
ΠΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ
[](https://habr.com/ru/users/NumDes/)
[NumDes](https://habr.com/ru/users/NumDes/)
6 ΠΎΠΊΡ 2021 Π² 12:56
# ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Python
7 ΠΌΠΈΠ½
123K
[ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π¦ΠΈΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://habr.com/ru/companies/numdes/articles/)[ΠΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ \*](https://habr.com/ru/hubs/hi/) [Python \*](https://habr.com/ru/hubs/python/) [ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ \*](https://habr.com/ru/hubs/programming/) [ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ \*](https://habr.com/ru/hubs/compilers/)

ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π° Python ΠΈ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ / Π΅Ρ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΡ. Π Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΡΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΡΡΠΏΠ΅Ρ ΠΊΡΡΡΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΠΈ Ρ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ, ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ
ΠΎΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π±ΡΠ°Π½Π½ΡΠΌ.
ΠΠΎ-Π²ΡΠΎΡΡΡ
, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ - Ρ
ΠΎΡΠ΅ΡΡΡ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, ΡΡΠΎ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊ ΡΠΏΡΠ°Π²ΠΈΡΡΡ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Python ΠΈ Π²ΡΠ΅Ρ
Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ°. ΠΡΠ»ΠΎ Π±Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Ρ
ΠΎΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π² ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
Π Π²ΠΎΡ ΡΡΡ Π½Π°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python-ΠΊΠΎΠ΄. ΠΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ Π ΡΡΠ»Π°Π½, Ρ ΡΡΠ°ΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«Π¦ΠΈΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β». Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
.
## AOT/JIT
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ β ΡΡΠΎ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠ°Ρ: ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ
Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π±Π»ΠΈΠ·ΠΊΠΎΠΌ ΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, ΠΈΠ»ΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΈ ΡΠ±ΠΎΡΠΊΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
- **AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ (ahead-of-time)** β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
- **JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ (just-in-time)** β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° (Π° ΡΠΎΡΠ½Π΅Π΅, Π±Π»ΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ) ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· - ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅.
## ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅Π»Π΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ [pyperfomance](https://pyperformance.readthedocs.io/). Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, pyperfomance Π½Π΅ ΠΏΠΎΠ΄ΠΎΡΠ΅Π» Π΄Π»Ρ Cython ΠΈ Pythran, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ°. Π£ΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Cython Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ, Π° Pythran Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ. ΠΠ»Ρ Π½ΠΈΡ
Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΡΠ»Π° ΠΏΠΈ:
```
```
ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ Intel Core i7 10510U. ΠΠ° CPython 3.9.7 Π²ΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΏΠΈ Π΄ΠΎ 100.000.000 Π·Π½Π°ΠΊΠ° Π·Π°Π½ΡΠ»ΠΎ 5.82 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
## AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Python
**PyInstaller**
PyInstaller ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Python Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² Windows, GNU / Linux, Mac OS X, FreeBSD, Solaris ΠΈ AIX.
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· pip:
`pip install pyinstaller`
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
`pyinstaller <ΠΈΠΌΡ_ΡΠ°ΠΉΠ»Π°>.py`
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΎ:
- **\*.spec** β ΡΠ°ΠΉΠ» ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡΠΈΡ
ΡΠ±ΠΎΡΠΎΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ .dll ΠΈ .so ΡΠ°ΠΉΠ»ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² runtime-Π° Python);
- **build/** β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°;
- **dist/** β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
Π‘Π±ΠΎΡΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
- **\--name** β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ);
- **\--onefile** β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠ°ΠΏΠΊΠ° Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»);
- **\--hidden-import** β ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ PyInstaller Π½Π΅ ΡΠΌΠΎΠ³ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ;
- **\--add-data** β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ±ΠΎΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ
;
- **\--add-binary** β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ±ΠΎΡΠΊΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ²;
- **\--exclude-module** β ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈΠ· ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°;
- **\--key** β ΠΊΠ»ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ AES256. ΠΠ°, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ: **Pyinstaller Extractor (.exe β .pyc)** ΠΈ **uncompile6 (.pyc β .py)**. ΠΠ»Ρ ΡΠΊΡΡΡΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Python Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
Π£ PyInstaller Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Python 3.5β3.9. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ, Π½ΠΎ Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΡΠΎΡΡΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Ρ. Π΅. Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΠ‘ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ glibc, Ρ. Π΅. Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΠ‘.
PyInstaller Π·Π½Π°Π΅Ρ ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
Python-ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
ΠΈ ΡΠΌΠ΅Π΅Ρ ΠΈΡ
ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠΎ Π½Π΅ ΠΎ Π²ΡΠ΅Ρ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ **uvicorn** ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΉΠ», ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° pyinstaller. ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ [Π·Π΄Π΅ΡΡ](https://github.com/pyinstaller/pyinstaller/wiki/Supported-Packages).
**Cython**
Cython - ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Cython. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ΄ Π½Π° Python ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² Π‘ ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ CPython. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
Π‘ΡΠ°Π²ΠΈΡΡΡ Cython ΡΠ΅ΡΠ΅Π· pip:
`pip install Cython`
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΡΠ»Π° ΠΏΠΈ:
1. ***ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:***
```
```
2. ***Cython β C:***
`cython -2Β pi_approximater.pyx -o pi_approximater.c`
3. ***ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π‘-ΡΠ½ΡΠΉ ΠΊΠΎΠ΄:***
`gcc -g -O2 -shared -o pi_approximater.so pi_approximater.c python-config --includes --ldflags -fPIC`
4. ***Π Π·Π°ΠΌΠ΅ΡΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΡ Π½Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅:*** 3,66 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
Π ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ? Π’ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΠΈ. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ±ΠΎΡΠΊΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» build.py:
```
```
ΠΠ°ΠΏΡΡΡΠΈΠΌ: `python build.py build_ext β-inplace`
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ **.so/.dll** ΡΠ°ΠΉΠ».
**Nuitka**
Nuitka ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Python Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python-ΠΊΠΎΠ΄ Π² Π‘ Π΄Π»Ρ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π Π°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Python (2.6, 2.7, 3.3 - 3.9).
Π‘ΡΠ°Π²ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· pip:
`pip install nuitka`
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
`python -m nuitka --follow-import some_program.py`
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ:
`python -m nuitka --module some_module.py`
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°:
`python -m nuitka --module some_package --include-package = some_package`
**Pythran**
Pythran β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Python, ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΡΡΠΈΠΉ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π½Π°ΡΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ SIMD. ΠΠ½ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ Python-ΠΊΠΎΠ΄, Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π² C++. ΠΠΎ Π²Π΅ΡΡΠΈΠΈ 0.9.5 (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ) Pythran ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π» Python 3 ΠΈ Python 2.7. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Python 3.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
`pip install pythran`
ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» **\<ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°\>.so**:
`pythran <ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°>.py`
Pythran ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°:
> ***Top level statements can only be assignments, strings,functions, comments, or imports***
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
```
```
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ Π²ΡΠ΄Π°Π΅Ρ 0,00007 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
**cx-Freeze**
cx-Freeze β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Python Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ. cx\_Freeze - ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΉ. ΠΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Python 3.5.2 ΠΈ Π²ΡΡΠ΅.
Π‘ΡΠ°Π²ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pip:
`pip install cx_Freeze`
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
`cxfreeze <ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°>.py`
Π‘Π±ΠΎΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
- **\-h**, **\--help** - ΡΠΏΡΠ°Π²ΠΊΠ°;
- **\-O** - ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ PYTHONOPTIMIZE;
- **\-c**, **\--compress** - ΡΠΆΠ°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Π² zip-ΡΠ°ΠΉΠ»Π°Ρ
;
- **\-s**, **\--silent** - Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ;
- **\--target-dir**\=DIR, **\--install-dir**\=DIR - ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
```
```
Π‘Π±ΠΎΡΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
`python setup.py build`
## JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Python
JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΡΡΠ²Π°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», Π½ΠΎ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
**PyPy**
PyPy - ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python 2.7 ΠΈ Python 3.7. ΠΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° RPython ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ:
- ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ΄Π° Python ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ;
- ΠΎΡΠ΅Π½ΡΠΈΠΊ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ΄Π° Python;
- ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅Π΅ Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Python, Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
PyPy ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python, Π²ΠΊΠ»ΡΡΠ°Ρ NumPy.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ (ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ CPython):
- **Π‘ΠΊΠΎΡΠΎΡΡΡ.** ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ
ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Python, PyPy ΠΌΠΎΠΆΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π²Π°Ρ ΠΊΠΎΠ΄.
- **ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.** ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Python, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΡΡΠΈ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π½ ΠΠ± ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅), ΠΌΠΎΠ³ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ°, ΡΠ΅ΠΌ Π² CPython. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄Π΅ΡΠ°Π»Π΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π²ΡΡΠ΅, ΡΠ΅ΠΌ Ρ CPython.
Π‘ΠΊΠ°ΡΠ°ΡΡ PyPy ΠΌΠΎΠΆΠ½ΠΎ Ρ [Π·Π΄Π΅ΡΡ](https://www.pypy.org/download.html). ΠΠΎΡΠ»Π΅ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ PyPy Π³ΠΎΡΠΎΠ² ΠΊ Π·Π°ΠΏΡΡΠΊΡ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π°ΡΡ
ΠΈΠ²Π°. ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ PyPy Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» pypy Π² **/usr/local/bin**. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ **pyenv**.
PyPy ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Mac, Linux (Π½Π΅ Π²ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Ρ) ΠΈΠ»ΠΈ Windows.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ PyPy Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ **python3** (ΠΊΠ°ΠΊ c ΠΏΠΎΠΌΠΎΡΡΡ CPython) Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ **pypy3**:
`pypy3 something.py`
**Pyston**
Pyston - ΡΡΠΎ ΡΠΎΡΠΊ CPython 3.8.8 Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ². ΠΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ **pyenv**.
Π Pyston ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ CPython, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ C API Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ. Π‘ΡΠ΅Π΄ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΎΡΠ»ΠΈΡΠΈΠΉ Pyston ΠΎΡ CPython ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΡΠΈΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅[DynASM JIT](https://luajit.org/dynasm.html) ΠΈ[inline-ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ](https://bugs.python.org/issue14757).
## ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ°ΠΊ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ 5 ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Python. ΠΠ»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ, Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ.
| | | | | | |
|---|---|---|---|---|---|
| | **PyInstaller** | **Cython** | **Nuitka** | **Pythran** | **cx-Freeze** |
| ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΡ
ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² | \+ | \- | \+ | \- | \+ |
| ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ python-ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ CPython | \- | \+ | \+ | \+ | \+ |
| ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Python | \+ | \- | \+ | \- | \+ |
| Π’ΡΠ°Π½ΡΠ»ΡΡΠΈΡ Python Π² Π‘/C++ | \- | \+ | \+ | \+ | \- |
| ΠΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ | \+ | \+ | \+ | \+ | \+ |
| ΠΡΠΎΡΡΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ | \- | \- | \- | \- | \- |
Π‘ΡΠ΅Π΄Π½Π΅Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π²Π΅ΡΡΠΈΡΡ
CPython, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°Ρ
Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ
AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:


## Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
1. [http://www.pyinstaller.org/](http://www.pyinstaller.org/)
2. [https://cython.org/](https://cython.org/)
3. [https://nuitka.net/](https://nuitka.net/)
4. [https://github.com/serge-sans-paille/pythran](https://github.com/serge-sans-paille/pythran)
5. [https://cx-freeze.readthedocs.io/en/latest/](https://cx-freeze.readthedocs.io/en/latest/)
6. [https://github.com/pyston/pyston](https://github.com/pyston/pyston)
7. [https://www.pypy.org/](https://www.pypy.org/)
Π’Π΅Π³ΠΈ:
- [python](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[python])
- [jit-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[jit-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80])
- [aot](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[aot])
- [pyinstaller](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[pyinstaller])
- [cython](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[cython])
- [nuitka](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[nuitka])
- [cx\_freeze](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[cx_freeze])
- [pypy](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[pypy])
Π₯Π°Π±Ρ:
- [ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π¦ΠΈΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://habr.com/ru/companies/numdes/articles/)
- [ΠΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ](https://habr.com/ru/hubs/hi/)
- [Python](https://habr.com/ru/hubs/python/)
- [ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://habr.com/ru/hubs/programming/)
- [ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ](https://habr.com/ru/hubs/compilers/)
\+10
194
[21](https://habr.com/ru/companies/numdes/articles/581374/comments/)
[](https://habr.com/ru/companies/numdes/profile/)
[Π¦ΠΈΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://habr.com/ru/companies/numdes/profile/)
ΠΠ°ΡΠΊΠ° ΠΈ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ
[Π‘Π°ΠΉΡ](https://numdes.com/)[Π₯Π°Π±Ρ ΠΠ°ΡΡΠ΅ΡΠ°](https://career.habr.com/companies/numdes)[ΠΠΠΎΠ½ΡΠ°ΠΊΡΠ΅](https://vk.com/numdes)[Instagram](https://instagram.com/numdesgn)
[](https://habr.com/ru/users/NumDes/)
5
ΠΠ°ΡΠΌΠ°
Π¦ΠΈΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅[@NumDes](https://habr.com/ru/users/NumDes/)
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ
Π₯Π°Π±Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ 24/7 Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ Π΄ΡΡΠ·Π΅ΠΉ

Π₯Π°Π±Ρ ΠΡΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π ΠΠΠΠΠΠ
ΠΡΠ°ΠΊΡΠΈΠΊΡΠΌ, Π₯Π΅ΠΊΡΠ»Π΅Ρ, SkyPro, Π°Π²ΡΠΎΡΡΠΊΠΈΠ΅ ΠΊΡΡΡΡ β ΡΠΎΠ±ΡΠ°Π»ΠΈ Π²ΡΠ΅Ρ
ΠΈ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΠΊΠΈΠ΄ΠΊΠΈ. ΠΡΡΠ°Π»ΠΎΡΡ Π²ΡΠ±ΡΠ°ΡΡ\!
[ΠΠ΅ΡΠ΅ΠΉΡΠΈ](https://career.habr.com/courses/?erid=2VSb5wDLYUH&utm_source=habr&utm_medium=sponsorship_hub)
[ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ 21](https://habr.com/ru/companies/numdes/articles/581374/comments/)
## ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ
ΠΡΡΡΠΈΠ΅ Π·Π° ΡΡΡΠΊΠΈ
ΠΠΎΡ
ΠΎΠΆΠΈΠ΅
## ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
Π‘Π°ΠΉΡ
[numdes.com](https://numdes.com/)
ΠΠ°ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ
24 Π°Π²Π³ΡΡΡΠ° 2021
Π§ΠΈΡΠ»Π΅Π½Π½ΠΎΡΡΡ
51β100 ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ
ΠΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π ΠΎΡΡΠΈΡ
ΠΠ°Ρ Π°ΠΊΠΊΠ°ΡΠ½Ρ
- [ΠΠΎΠΉΡΠΈ](https://habr.com/kek/v1/auth/habrahabr/?back=/ru/companies/numdes/articles/581374/&hl=ru)
- [Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ](https://habr.com/kek/v1/auth/habrahabr-register/?back=/ru/companies/numdes/articles/581374/&hl=ru)
Π Π°Π·Π΄Π΅Π»Ρ
- [Π‘ΡΠ°ΡΡΠΈ](https://habr.com/ru/articles/)
- [ΠΠΎΠ²ΠΎΡΡΠΈ](https://habr.com/ru/news/)
- [Π₯Π°Π±Ρ](https://habr.com/ru/hubs/)
- [ΠΠΎΠΌΠΏΠ°Π½ΠΈΠΈ](https://habr.com/ru/companies/)
- [ΠΠ²ΡΠΎΡΡ](https://habr.com/ru/users/)
- [ΠΠ΅ΡΠΎΡΠ½ΠΈΡΠ°](https://habr.com/ru/sandbox/)
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
- [Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠ°ΠΉΡΠ°](https://habr.com/ru/docs/help/)
- [ΠΠ»Ρ Π°Π²ΡΠΎΡΠΎΠ²](https://habr.com/ru/docs/authors/codex/)
- [ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ](https://habr.com/ru/docs/companies/corpblogs/)
- [ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ](https://habr.com/ru/docs/docs/transparency/)
- [Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅](https://account.habr.com/info/agreement/?hl=ru_RU)
- [ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ](https://account.habr.com/info/confidential/?hl=ru_RU)
Π£ΡΠ»ΡΠ³ΠΈ
- [ΠΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠ³](https://company.habr.com/ru/corporate-blogs/)
- [ΠΠ΅Π΄ΠΈΠΉΠ½Π°Ρ ΡΠ΅ΠΊΠ»Π°ΠΌΠ°](https://company.habr.com/ru/advertising/)
- [ΠΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ](https://company.habr.com/ru/native-special/)
- [ΠΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ](https://company.habr.com/ru/education-programs/)
- [Π‘ΡΠ°ΡΡΠ°ΠΏΠ°ΠΌ](https://company.habr.com/ru/hello-startup/)
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ·ΡΠΊΠ°
[Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°](https://habr.com/ru/feedback/)
Β© 2006β2026, [Habr](https://company.habr.com/) |
| Readable Markdown | 
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π° Python ΠΈ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ / Π΅Ρ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΡ. Π Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΡΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΡΡΠΏΠ΅Ρ ΠΊΡΡΡΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΠΈ Ρ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ, ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ
ΠΎΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π±ΡΠ°Π½Π½ΡΠΌ.
ΠΠΎ-Π²ΡΠΎΡΡΡ
, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ - Ρ
ΠΎΡΠ΅ΡΡΡ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, ΡΡΠΎ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊ ΡΠΏΡΠ°Π²ΠΈΡΡΡ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Python ΠΈ Π²ΡΠ΅Ρ
Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ°. ΠΡΠ»ΠΎ Π±Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Ρ
ΠΎΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π² ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
Π Π²ΠΎΡ ΡΡΡ Π½Π°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python-ΠΊΠΎΠ΄. ΠΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ Π ΡΡΠ»Π°Π½, Ρ ΡΡΠ°ΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«Π¦ΠΈΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β». Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
.
## AOT/JIT
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ β ΡΡΠΎ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠ°Ρ: ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ
Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π±Π»ΠΈΠ·ΠΊΠΎΠΌ ΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, ΠΈΠ»ΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΈ ΡΠ±ΠΎΡΠΊΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
- **AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ (ahead-of-time)** β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
- **JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ (just-in-time)** β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° (Π° ΡΠΎΡΠ½Π΅Π΅, Π±Π»ΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ) ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· - ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅.
## ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅Π»Π΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ [pyperfomance](https://pyperformance.readthedocs.io/). Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, pyperfomance Π½Π΅ ΠΏΠΎΠ΄ΠΎΡΠ΅Π» Π΄Π»Ρ Cython ΠΈ Pythran, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ°. Π£ΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Cython Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ, Π° Pythran Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ. ΠΠ»Ρ Π½ΠΈΡ
Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΡΠ»Π° ΠΏΠΈ:
```
def approximate_pi(n):
step = 1.0 / n
result = 0
for i in range(n):
x = (i + 0.5) * step
result += 4.0 / (1.0 + x * x)
return step * result
```
ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ Intel Core i7 10510U. ΠΠ° CPython 3.9.7 Π²ΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΏΠΈ Π΄ΠΎ 100.000.000 Π·Π½Π°ΠΊΠ° Π·Π°Π½ΡΠ»ΠΎ 5.82 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
## AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Python
**PyInstaller**
PyInstaller ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Python Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² Windows, GNU / Linux, Mac OS X, FreeBSD, Solaris ΠΈ AIX.
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· pip:
`pip install pyinstaller`
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
`pyinstaller <ΠΈΠΌΡ_ΡΠ°ΠΉΠ»Π°>.py`
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΎ:
- **\*.spec** β ΡΠ°ΠΉΠ» ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡΠΈΡ
ΡΠ±ΠΎΡΠΎΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ .dll ΠΈ .so ΡΠ°ΠΉΠ»ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² runtime-Π° Python);
- **build/** β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°;
- **dist/** β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
Π‘Π±ΠΎΡΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
- **\--name** β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ);
- **\--onefile** β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠ°ΠΏΠΊΠ° Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»);
- **\--hidden-import** β ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ PyInstaller Π½Π΅ ΡΠΌΠΎΠ³ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ;
- **\--add-data** β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ±ΠΎΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ
;
- **\--add-binary** β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ±ΠΎΡΠΊΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ²;
- **\--exclude-module** β ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈΠ· ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°;
- **\--key** β ΠΊΠ»ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ AES256. ΠΠ°, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ: **Pyinstaller Extractor (.exe β .pyc)** ΠΈ **uncompile6 (.pyc β .py)**. ΠΠ»Ρ ΡΠΊΡΡΡΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Python Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
Π£ PyInstaller Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Python 3.5β3.9. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ, Π½ΠΎ Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΡΠΎΡΡΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Ρ. Π΅. Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΠ‘ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ glibc, Ρ. Π΅. Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΠ‘.
PyInstaller Π·Π½Π°Π΅Ρ ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
Python-ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
ΠΈ ΡΠΌΠ΅Π΅Ρ ΠΈΡ
ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠΎ Π½Π΅ ΠΎ Π²ΡΠ΅Ρ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ **uvicorn** ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΉΠ», ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° pyinstaller. ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ [Π·Π΄Π΅ΡΡ](https://github.com/pyinstaller/pyinstaller/wiki/Supported-Packages).
**Cython**
Cython - ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Cython. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ΄ Π½Π° Python ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² Π‘ ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ CPython. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
Π‘ΡΠ°Π²ΠΈΡΡΡ Cython ΡΠ΅ΡΠ΅Π· pip:
`pip install Cython`
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΡΠ»Π° ΠΏΠΈ:
1. ***ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:***
```
def approximate_pi(int n):
cdef float step
cdef float result
cdef float x
step = 1.0 / n
result = 0.0
for i in range(n):
x = (i + 0.5) * step
result += 4.0 / (1.0 + x * x)
return step * result
```
2. ***Cython β C:***
`cython -2Β pi_approximater.pyx -o pi_approximater.c`
3. ***ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π‘-ΡΠ½ΡΠΉ ΠΊΠΎΠ΄:***
`gcc -g -O2 -shared -o pi_approximater.so pi_approximater.c python-config --includes --ldflags -fPIC`
4. ***Π Π·Π°ΠΌΠ΅ΡΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΡ Π½Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅:*** 3,66 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
Π ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ? Π’ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΠΈ. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ±ΠΎΡΠΊΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» build.py:
```
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("bench_cython.pyx"),
)
```
ΠΠ°ΠΏΡΡΡΠΈΠΌ: `python build.py build_ext β-inplace`
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ **.so/.dll** ΡΠ°ΠΉΠ».
**Nuitka**
Nuitka ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Python Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python-ΠΊΠΎΠ΄ Π² Π‘ Π΄Π»Ρ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π Π°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Python (2.6, 2.7, 3.3 - 3.9).
Π‘ΡΠ°Π²ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· pip:
`pip install nuitka`
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
`python -m nuitka --follow-import some_program.py`
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ:
`python -m nuitka --module some_module.py`
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°:
`python -m nuitka --module some_package --include-package = some_package`
**Pythran**
Pythran β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Python, ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΡΡΠΈΠΉ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π½Π°ΡΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ SIMD. ΠΠ½ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ Python-ΠΊΠΎΠ΄, Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π² C++. ΠΠΎ Π²Π΅ΡΡΠΈΠΈ 0.9.5 (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ) Pythran ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π» Python 3 ΠΈ Python 2.7. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Python 3.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
`pip install pythran`
ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» **\<ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°\>.so**:
`pythran <ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°>.py`
Pythran ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°:
> ***Top level statements can only be assignments, strings,functions, comments, or imports***
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
```
#pythran export approximate_pi(int)
def approximate_pi(n):
step = 1.0 / n
result = 0
for i in range(n):
x = (i + 0.5) * step
result += 4.0 / (1.0 + x * x)
return step * result
```
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ Π²ΡΠ΄Π°Π΅Ρ 0,00007 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
**cx-Freeze**
cx-Freeze β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Python Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ. cx\_Freeze - ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΉ. ΠΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Python 3.5.2 ΠΈ Π²ΡΡΠ΅.
Π‘ΡΠ°Π²ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pip:
`pip install cx_Freeze`
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
`cxfreeze <ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°>.py`
Π‘Π±ΠΎΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
- **\-h**, **\--help** - ΡΠΏΡΠ°Π²ΠΊΠ°;
- **\-O** - ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ PYTHONOPTIMIZE;
- **\-c**, **\--compress** - ΡΠΆΠ°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Π² zip-ΡΠ°ΠΉΠ»Π°Ρ
;
- **\-s**, **\--silent** - Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ;
- **\--target-dir**\=DIR, **\--install-dir**\=DIR - ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
```
import sys
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base)])
```
Π‘Π±ΠΎΡΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
`python setup.py build`
## JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Python
JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΡΡΠ²Π°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», Π½ΠΎ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
**PyPy**
PyPy - ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python 2.7 ΠΈ Python 3.7. ΠΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° RPython ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ:
- ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ΄Π° Python ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ;
- ΠΎΡΠ΅Π½ΡΠΈΠΊ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ΄Π° Python;
- ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅Π΅ Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Python, Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
PyPy ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python, Π²ΠΊΠ»ΡΡΠ°Ρ NumPy.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ (ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ CPython):
- **Π‘ΠΊΠΎΡΠΎΡΡΡ.** ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ
ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Python, PyPy ΠΌΠΎΠΆΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π²Π°Ρ ΠΊΠΎΠ΄.
- **ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.** ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Python, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΡΡΠΈ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π½ ΠΠ± ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅), ΠΌΠΎΠ³ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ°, ΡΠ΅ΠΌ Π² CPython. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄Π΅ΡΠ°Π»Π΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π²ΡΡΠ΅, ΡΠ΅ΠΌ Ρ CPython.
Π‘ΠΊΠ°ΡΠ°ΡΡ PyPy ΠΌΠΎΠΆΠ½ΠΎ Ρ [Π·Π΄Π΅ΡΡ](https://www.pypy.org/download.html). ΠΠΎΡΠ»Π΅ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ PyPy Π³ΠΎΡΠΎΠ² ΠΊ Π·Π°ΠΏΡΡΠΊΡ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π°ΡΡ
ΠΈΠ²Π°. ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ PyPy Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» pypy Π² **/usr/local/bin**. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ **pyenv**.
PyPy ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Mac, Linux (Π½Π΅ Π²ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Ρ) ΠΈΠ»ΠΈ Windows.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ PyPy Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ **python3** (ΠΊΠ°ΠΊ c ΠΏΠΎΠΌΠΎΡΡΡ CPython) Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ **pypy3**:
`pypy3 something.py`
**Pyston**
Pyston - ΡΡΠΎ ΡΠΎΡΠΊ CPython 3.8.8 Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ². ΠΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ **pyenv**.
Π Pyston ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ CPython, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ C API Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ. Π‘ΡΠ΅Π΄ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΎΡΠ»ΠΈΡΠΈΠΉ Pyston ΠΎΡ CPython ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΡΠΈΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅[DynASM JIT](https://luajit.org/dynasm.html) ΠΈ[inline-ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ](https://bugs.python.org/issue14757).
## ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ°ΠΊ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ 5 ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Python. ΠΠ»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ, Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ.
| | | | | | |
|---|---|---|---|---|---|
| | **PyInstaller** | **Cython** | **Nuitka** | **Pythran** | **cx-Freeze** |
| ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΡ
ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² | \+ | \- | \+ | \- | \+ |
| ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ python-ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ CPython | \- | \+ | \+ | \+ | \+ |
| ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Python | \+ | \- | \+ | \- | \+ |
| Π’ΡΠ°Π½ΡΠ»ΡΡΠΈΡ Python Π² Π‘/C++ | \- | \+ | \+ | \+ | \- |
| ΠΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ | \+ | \+ | \+ | \+ | \+ |
| ΠΡΠΎΡΡΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ | \- | \- | \- | \- | \- |
Π‘ΡΠ΅Π΄Π½Π΅Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π²Π΅ΡΡΠΈΡΡ
CPython, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°Ρ
Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ
AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:


## Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
1. [http://www.pyinstaller.org/](http://www.pyinstaller.org/)
2. [https://cython.org/](https://cython.org/)
3. [https://nuitka.net/](https://nuitka.net/)
4. [https://github.com/serge-sans-paille/pythran](https://github.com/serge-sans-paille/pythran)
5. [https://cx-freeze.readthedocs.io/en/latest/](https://cx-freeze.readthedocs.io/en/latest/)
6. [https://github.com/pyston/pyston](https://github.com/pyston/pyston)
7. [https://www.pypy.org/](https://www.pypy.org/) |
| Shard | 134 (laksa) |
| Root Hash | 14843476518697139734 |
| Unparsed URL | com,habr!/ru/companies/numdes/articles/581374/ s443 |