πŸ•·οΈ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 181 (from laksa186)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

ℹ️ Skipped - page is already crawled

πŸ“„
INDEXABLE
βœ…
CRAWLED
1 day ago
πŸ€–
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH0.1 months ago
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalPASSmeta_canonical IS NULL OR = '' OR = src_unparsedNot set

Page Details

PropertyValue
URLhttps://sky.pro/wiki/python/kak-kompilirovat-python-3/
Last Crawled2026-04-05 14:10:55 (1 day ago)
First Indexed2024-06-04 16:43:52 (1 year ago)
HTTP Status Code200
Meta TitleΠŸΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Python-ΠΊΠΎΠ΄ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ прилоТСния: инструкция ΠΏΠΎ компиляции
Meta DescriptionΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Python-ΠΊΠΎΠ΄Π° Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹: шаги, инструмСнты ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ для упрощСния распространСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Meta Canonicalnull
Boilerpipe Text
#Π Π°Π·Π½ΠΎΠ΅Β Β  ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ тСст, ΡƒΠ·Π½Π°ΠΉΡ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ профСссии ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Бколько Π²Π°ΠΌ Π»Π΅Ρ‚ 0% Π”ΠΎ 18 ΠžΡ‚ 18 Π΄ΠΎ 24 ΠžΡ‚ 25 Π΄ΠΎ 34 ΠžΡ‚ 35 Π΄ΠΎ 44 ΠžΡ‚ 45 Π΄ΠΎ 49 ΠžΡ‚ 50 Π΄ΠΎ 54 Π‘ΠΎΠ»ΡŒΡˆΠ΅ 55 Для ΠΊΠΎΠ³ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ: Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π° Python, ΠΈΡ‰ΡƒΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ компиляции своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π›ΡŽΠ΄ΠΈ, заинтСрСсованныС Π² распространСнии своих Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Π΅Π· установки ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»Ρ‹ Π² области IT, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ свои прилоТСния Π’Ρ‹ создали гСниальноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Python 3, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСловкая ситуация: "А Π³Π΄Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Python? ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π½Π΅ просто .exe Ρ„Π°ΠΉΠ»?" Π—Π½Π°ΠΊΠΎΠΌΠΎ, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? πŸ€” ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Python-ΠΊΠΎΠ΄Π° Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ β€” это тСхничСский квСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ вопросов Π΄Π°ΠΆΠ΅ Ρƒ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ваш .py Ρ„Π°ΠΉΠ» Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ распространСниС вашСго ПО ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Π³Π»Π°Π·. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Python-ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ всС аспСкты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° этом языкС? ΠšΡƒΡ€Ρ ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΎΡ‚ Skypro ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ вас Π² ΠΌΠΈΡ€ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ β€” ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ смогут ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ люди Π±Π΅Π· тСхничСских Π·Π½Π°Π½ΠΈΠΉ. ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ компиляции Python 3: ΠΌΠΈΡ„Ρ‹ ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Когда Ρ€Π΅Ρ‡ΡŒ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎ компиляции Python 3, ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ β€” Python ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ являСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Python выполняСтся строка Π·Π° строкой ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π° Π½Π΅ прСобразуСтся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² C++ ΠΈΠ»ΠΈ Java. 🐍 Однако это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ· Python-ΠΊΠΎΠ΄Π°. БущСствуСт нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ "компиляции" Python: Π‘Π°ΠΉΡ‚-компиляция : Python автоматичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ (.pyc Ρ„Π°ΠΉΠ»Ρ‹), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ интСрпрСтируСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Python (PVM). Π­Ρ‚ΠΎ Π½Π΅ настоящая компиляция Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° (packaging) : Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ PyInstaller ΠΈΠ»ΠΈ py2exe "ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚" ваш ΠΊΠΎΠ΄ вмСстС с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Python ΠΈ всСми зависимостями Π² ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». Врансляция Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄ : Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Cython ΠΈΠ»ΠΈ Nuitka пСрСводят Python-ΠΊΠΎΠ΄ Π² C/C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. АлСксСй ΠŸΠ΅Ρ‚Ρ€ΠΎΠ², тСхничСский Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ Π― Π΄ΠΎΠ»Π³ΠΎ считал, Ρ‡Ρ‚ΠΎ компиляция Python β€” это ΠΌΠΈΡ„. Π’ нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠΎ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ настаивал Π½Π° поставкС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ самодостаточного прилоТСния, Π±Π΅Π· нСобходимости установки Python. РСшСниС ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ β€” PyInstaller ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ» наш ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» Π·Π° считанныС ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Π”Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Ρ‹Π» Π²Π½ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (ΠΎΠΊΠΎΠ»ΠΎ 60 ΠœΠ‘), Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ остался Π΄ΠΎΠ²ΠΎΠ»Π΅Π½. ОсобСнно ΠΏΠΎΡ€Π°Π΄ΠΎΠ²Π°Π»ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΈ строчки ΠΊΠΎΠ΄Π° для совмСстимости с компилятором. Π“Π»Π°Π²Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ β€” Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° C++ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° нСобходимости создания исполняСмого Ρ„Π°ΠΉΠ»Π°. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ основныС заблуТдСния ΠΎ компиляции Python: ΠœΠΈΡ„ Π Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python нСльзя ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python ΠΈ ΠΊΠΎΠ΄ Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Python Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ быстро, ΠΊΠ°ΠΊ C++ Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² "компиляции" Python Π½Π΅ Π΄Π°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прироста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ лишь Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ дСкомпиляции Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ Π€Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ большой Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (Windows, macOS, Linux) Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π˜ΡΡ‚ΠΈΠ½Π½Π°Ρ Ρ†Π΅Π»ΡŒ "компиляции" Python β€” это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, сколько ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ распространСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ (Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни) Π·Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π°. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмого Ρ„Π°ΠΉΠ»Π° позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· установки Python ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ инструмСнты для компиляции ΠΊΠΎΠ΄Π° Python 3 Для создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Python-ΠΊΠΎΠ΄Π° сущСствуСт нСсколько ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… инструмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ со своими прСимущСствами ΠΈ ограничСниями. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для компиляции Python 3. βš™οΈ Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° НСдостатки Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования PyInstaller Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Python-скрипт, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ зависимости Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠšΡ€ΠΎΡΡ-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, простота использования, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ зависимостСй Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, Π½Π΅ Π΄Π°Π΅Ρ‚ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Низкая Nuitka ВранслируСт Python Π² C++, Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π»ΡƒΡ‡ΡˆΠ°Ρ Π·Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π° Π‘Π»ΠΎΠΆΠ½Π΅Π΅ Π² настройкС, Π½Π΅ всС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ БрСдняя Cython ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π² C ΠΊΠΎΠ΄, Π·Π°Ρ‚Π΅ΠΌ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ БущСствСнноС ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ измСнСния исходного ΠΊΠΎΠ΄Π°, Π½Π΅ для всСго прилоТСния Высокая py2exe Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ exe-Ρ„Π°ΠΉΠ»Ρ‹ для Windows ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° использования, фокус Π½Π° Windows-прилоТСниях Волько для Windows, устарСваСт Низкая cx_Freeze Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠšΡ€ΠΎΡΡ-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС Ρ€ΡƒΡ‡Π½ΠΎΠΉ настройки для слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ БрСдняя PyInstaller β€” самый популярный Π²Ρ‹Π±ΠΎΡ€ благодаря простотС использования ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика": Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ваш ΠΊΠΎΠ΄, опрСдСляСт всС зависимости ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π² ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». ИдСальноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²: Nuitka прСдставляСт собой Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, транслируя Python-ΠΊΠΎΠ΄ Π² C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ-интСнсивных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: Cython β€” это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ инструмСнт для создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², сколько язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Python для компиляции Π² C. Он особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ частСй ΠΊΠΎΠ΄Π°: Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ Π‘ΠΎΠΊΠΎΠ»ΠΎΠ², DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ Когда наша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»Π°ΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ развСртывания Python-прилоТСния Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° Π±Π΅Π· установки ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с PyInstaller. Всё Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Π½Π° тСстовых ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π½ΠΎ послС развСртывания Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: антивирусы часто ΠΏΠΎΠΌΠ΅Ρ‡Π°Π»ΠΈ наши исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ систСмныС зависимости Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. ПослС Π½Π΅Π΄Π΅Π»ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: использовали Nuitka для компиляции основного модуля (Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с антивирусами) ΠΈ PyInstaller для создания Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ дистрибутива. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎ врСмя сборки, Π½ΠΎ устранило всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ развСртывания. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Ρ‚Π°ΠΊΠΎΠΉ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ стал нашим стандартом для ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Для Π²Ρ‹Π±ΠΎΡ€Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящСго инструмСнта компиляции Python 3, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ критСриями: Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° : Для простых скриптов достаточно PyInstaller, для слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Nuitka ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. ВрСбования ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ : Если ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π°, рассмотритС Cython ΠΈΠ»ΠΈ Nuitka. ЦСлСвая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° : Для Windows-спСцифичных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ py2exe ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅; для кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” PyInstaller ΠΈΠ»ΠΈ cx_Freeze. Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΠ΄Π° : Nuitka обСспСчиваСт Π»ΡƒΡ‡ΡˆΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ дСкомпиляции, Ρ‡Π΅ΠΌ PyInstaller. ВрСмя ΠΈ рСсурсы Π½Π° освоСниС : PyInstaller ΠΈ py2exe Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… усилий для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹. НСзависимо ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ инструмСнта, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ компиляция Python β€” это компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ удобством распространСния, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΊΠΎΠ΄Π°. πŸ”§ PyInstaller: пошаговоС созданиС исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² PyInstaller β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ для Windows, macOS ΠΈ Linux. Рассмотрим ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ процСсс создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyInstaller. πŸ“¦ Π¨Π°Π³ 1: Установка PyInstaller ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PyInstaller Ρ‡Π΅Ρ€Π΅Π· pip: Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚Ρƒ ΠΆΠ΅ Π²Π΅Ρ€ΡΠΈΡŽ Python, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. РСкомСндуСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² с систСмными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ: Π¨Π°Π³ 2: Базовая компиляция Для простого скрипта достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: Π­Ρ‚ΠΎ создаст ΠΏΠ°ΠΏΠΊΡƒ "dist", Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ исполняСмый Ρ„Π°ΠΉΠ» ΠΈ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ PyInstaller создаёт ΠΏΠ°ΠΏΠΊΡƒ с нСсколькими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π° Π½Π΅ ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». Π¨Π°Π³ 3: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π° Для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ всСго Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ --onefile : Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ для распространСния, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ нСдостаток β€” Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ запуск, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС происходит распаковка Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ. Π¨Π°Π³ 4: Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки PyInstaller ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ мноТСство ΠΎΠΏΡ†ΠΈΠΉ для настройки процСсса компиляции: --name : Π·Π°Π΄Π°Π΅Ρ‚ имя исполняСмого Ρ„Π°ΠΉΠ»Π°: --icon : добавляСт Π·Π½Π°Ρ‡ΠΎΠΊ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Windows ΠΈ macOS): --noconsole (ΠΈΠ»ΠΈ --windowed ): скрываСт консоль ΠΏΡ€ΠΈ запускС (для GUI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ): --add-data : Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ: Π¨Π°Π³ 5: ИспользованиС spec-Ρ„Π°ΠΉΠ»Π° для слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Для слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ spec-Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ большС контроля Π½Π°Π΄ процСссом сборки: Π­Ρ‚ΠΎ создаст Ρ„Π°ΠΉΠ» MyApp.spec, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² сборки. ПослС рСдактирования ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ с использованиСм spec-Ρ„Π°ΠΉΠ»Π°: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки spec-Ρ„Π°ΠΉΠ»Π° для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ скрытых ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²: Π¨Π°Π³ 6: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ тСстированиС ПослС создания исполняСмого Ρ„Π°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° "чистой" систСмС Π±Π΅Π· установлСнного Python ΠΈ зависимостСй. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вашСго прилоТСния, особСнно Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ динамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ рСсурсы. Π¨Π°Π³ 7: РСшСниС Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ : Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --hidden-import для явного указания ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ PyInstaller Π½Π΅ смог ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ автоматичСски: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с путями ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ : Π’Π½ΡƒΡ‚Ρ€ΠΈ скомпилированного прилоТСния ΠΏΡƒΡ‚ΠΈ ΠΊ рСсурсам ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ для опрСдСлСния ΠΏΡƒΡ‚ΠΈ ΠΊ рСсурсам: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyInstaller β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ распространСния Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ срСди ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π±Π΅Π· нСобходимости установки Python. Однако, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ компромиссах: исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС исходного ΠΊΠΎΠ΄Π°, Π° запуск ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, особСнно ΠΏΡ€ΠΈ использовании ΠΎΠΏΡ†ΠΈΠΈ --onefile . πŸš€ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° скомпилированного Python-ΠΊΠΎΠ΄Π° ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ компиляции Python-ΠΊΠΎΠ΄Π° Π² исполняСмый Ρ„Π°ΠΉΠ», ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π²ΡΡ‚Π°ΡŽΡ‚ Π΄Π²Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ: оптимизация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ собствСнности. Рассмотрим эффСктивныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих Π·Π°Π΄Π°Ρ‡. πŸ›‘οΈ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ скомпилированного ΠΊΠΎΠ΄Π° УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° исполняСмого Ρ„Π°ΠΉΠ»Π° Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ : Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --exclude-module Π² PyInstaller для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ: ИспользованиС UPX для сТатия : UPX β€” это инструмСнт для сТатия исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€: ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° зависимостСй : ΠŸΠ΅Ρ€Π΅Π΄ компиляциСй ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: УскорСниС запуска ΠΈ выполнСния ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ структуры : ΠžΠΏΡ†ΠΈΡ --onedir Π² PyInstaller создаёт Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ускоряСт запуск ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с --onefile , Π³Π΄Π΅ происходит распаковка Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС: ИспользованиС Nuitka для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… частСй : Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ-ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ части прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Nuitka, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΡ… Π² основном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° : Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Python ΠΏΡ€ΠΈ компиляции: Π—Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π° ΠΎΡ‚ дСкомпиляции ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Python-ΠΊΠΎΠ΄ ΠΎΡ‚ дСкомпиляции Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сущСствСнно ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ этот процСсс: ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй ИспользованиС PyArmor : Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ для обфускации ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Python-скриптов: ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ : Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ pyminifier ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹: Π—Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ компиляции ИспользованиС Nuitka с Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ --standalone : Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТнСС Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄: ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² C-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ : Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Cython для компиляции особо Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй ΠΊΠΎΠ΄Π°: Π—Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ исполняСмого Ρ„Π°ΠΉΠ»Π° Цифровая подпись : ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ ваш исполняСмый Ρ„Π°ΠΉΠ» для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ нСсанкционированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности : ВстройтС Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ запуск ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: Баланс ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠŸΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π΅ скомпилированного Python-ΠΊΠΎΠ΄Π° Π²Π°ΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ аспСктами: АспСкт ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡΡ‹ Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° UPX сТатиС, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠΈ с ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ большС ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запуска --onedir вмСсто --onefile ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ ΠΈ цСлостности Π—Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ запуск Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния Cython, Nuitka для горячих участков ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΠ΄Π° Минимальная ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ компиляции PyArmor, Nuitka, C-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π‘ΠΎΠ»Π΅Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ слоТнСС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Широкая ΠΏΡ€ΠΈ использовании PyInstaller ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ комплСксной Π·Π°Ρ‰ΠΈΡ‚Π΅ НСобходимо тСстированиС Π½Π° всСх Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… КомплСксная стратСгия Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ: ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ исходного ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй. ИспользованиС Nuitka ΠΈΠ»ΠΈ Cython для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ обфусцированного ΠΊΠΎΠ΄Π° с PyInstaller. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ цСлостности ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² лицСнзирования. Цифровая подпись ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π½Π΅ сущСствуСт β€” Ρ†Π΅Π»ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ вашСго ΠΊΠΎΠ΄Π° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΡƒΠ΄ΠΎΡ‘ΠΌΠΊΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Ρ‘Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Π±ΠΎΠ»Π΅Π΅ Π»Ρ‘Π³ΠΊΡƒΡŽ Ρ†Π΅Π»ΡŒ. πŸ”’ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ компиляции Python 3 ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠŸΡ€ΠΈ компиляции Python-ΠΊΠΎΠ΄Π° Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ рСгулярно ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с рядом Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС прСпятствия ΠΈ эффСктивныС способы ΠΈΡ… прСодолСния. πŸ› οΈ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 1: ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² скомпилированном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Одна ΠΈΠ· самых частых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” PyInstaller ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты компиляции Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ всС зависимости, особСнно ΠΏΡ€ΠΈ использовании динамичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈΠ»ΠΈ Ρ€Π΅Π΄ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. РСшСниС: Π―Π²Π½ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ скрытыС зависимости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ --hidden-import : Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ…ΡƒΠΊ для слоТных зависимостСй (Ρ…ΡƒΠΊΠΈ β€” это Python-скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ PyInstaller ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ зависимости): Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ --debug для выявлСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 2: ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов (изобраТСния, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ) Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ часто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов, особСнно Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ. РСшСниС: Π―Π²Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ рСсурсы Π² процСсс компиляции: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для опрСдСлСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· исходного ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΈΠ· скомпилированного Ρ„Π°ΠΉΠ»Π°: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 3: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ символы Π² Ρ€Π°Π·Π½Ρ‹Ρ… локалях ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ…. РСшСниС: Π―Π²Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ Π² процСсс компиляции: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 4: ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ с антивирусами Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ с PyInstaller Ρ„Π°ΠΉΠ»Ρ‹ часто ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ антивирусами ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасныС ΠΈΠ·-Π·Π° ΠΈΡ… структуры. РСшСниС: ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ ваш исполняСмый Ρ„Π°ΠΉΠ» Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ сСртификатом: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ распространСния ΠΈ Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΡŽ вашСго Π±Ρ€Π΅Π½Π΄Π°. РассмотритС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ компиляторы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Nuitka, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаёт Π±ΠΎΠ»Π΅Π΅ "ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅" исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 5: Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ большой Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ всС зависимости. РСшСниС: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ UPX для сТатия (Ссли это Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с антивирусами): Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΈΡ… зависимости: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ зависимости ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 6: ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ каТутся совмСстимыми. РСшСниС: ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ кросс-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ (для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ): Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ условныС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ для платформозависимых частСй ΠΊΠΎΠ΄Π°: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 7: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ внСшними соСдинСниями Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ внСшним API. РСшСниС: Π―Π²Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ: Для ODBC ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… слоТных соСдинСний Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ DLL Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ: Бводная Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π‘ΠΈΠΌΠΏΡ‚ΠΎΠΌΡ‹ РСшСниС Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ImportError ΠΏΡ€ΠΈ запускС Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ зависимостСй --hidden-import , Ρ…ΡƒΠΊΠΈ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с путями ΠΊ рСсурсам FileNotFoundError ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡƒΡ‚Π΅ΠΉ, --add-data sys._MEIPASS , resource_path() ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ UnicodeDecodeError Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ encoding='utf-8' АнтивирусныС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠšΠ°Ρ€Π°Π½Ρ‚ΠΈΠ½ Ρ„Π°ΠΉΠ»Π°, прСдупрСТдСния Цифровая подпись, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ компиляторы signtool , Nuitka Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° > 50MB для простых скриптов ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ зависимостСй, сТатиС UPX, --exclude-module ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ОБ, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ компиляция для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Docker, условныС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π‘Π” Ошибки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π” Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², DLL --hidden-import , --add-binary Для комплСксных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² рСкомСндуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ скрипт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ компиляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ всС особСнности вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΎΠΉ скрипт ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, постобработку ΠΈ тСстированиС скомпилированного прилоТСния. НСсмотря Π½Π° всС слоТности, компиляция Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ β€” Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ Π·Π°Π΄Π°Ρ‡Π°. БистСматичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ диагностикС ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π² распространСнии прилоТСния. πŸš€ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Python-ΠΊΠΎΠ΄Π° β€” это Π½Π΅ просто тСхничСская опСрация, Π° стратСгичСскоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ возмоТности для распространСния Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Освоив инструмСнты Π²Ρ€ΠΎΠ΄Π΅ PyInstaller, Nuitka ΠΈΠ»ΠΈ Cython, Π²Ρ‹ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Π±Π°Ρ€ΡŒΠ΅Ρ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ, позволяя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π±Π΅Π· тСхничСских Π·Π½Π°Π½ΠΈΠΉ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ скомпилированноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” это визитная ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ дСталям. Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅
Markdown
[![logo](https://sky.pro/wiki/_next/static/media/logo.7310b88b.svg)](https://sky.pro/wiki/) ВсС курсы![ВсС курсы](https://sky.pro/wiki/_next/static/media/arrow-down.b7053fd5.svg) [ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅](https://sky.pro/courses/programming?utm_source=skypro_wiki)[Аналитика](https://sky.pro/courses/analytics?utm_source=skypro_wiki)[Π”ΠΈΠ·Π°ΠΉΠ½](https://sky.pro/courses/design?utm_source=skypro_wiki)[ΠœΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³](https://sky.pro/courses/marketing?utm_source=skypro_wiki) [Π’Π΅Π±ΠΈΠ½Π°Ρ€Ρ‹](https://sky.pro/webinars?utm_source=skypro_wiki)[Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² IT](https://sky.pro/promo/media/main-proftest?utm_source=skypro_wiki&utm_medium=how-it)[Π Π΅Ρ„Π΅Ρ€Π°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°](https://sky.pro/referral_graduate?utm_source=skypro_wiki)[![ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΡŽ Π² Skypro](https://sky.pro/wiki/_next/static/media/profession.e342f684.svg)ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΡŽ Π² Skypro](https://sky.pro/?utm_source=skypro_wiki&utm_medium=free) ![МСню](https://sky.pro/wiki/_next/static/media/burger-menu.e5065ba6.svg) [Java](https://sky.pro/wiki/java/) [Python](https://sky.pro/wiki/python/) [HTML](https://sky.pro/wiki/html/) [SQL](https://sky.pro/wiki/sql/) [JavaScript](https://sky.pro/wiki/javascript/) [Profession](https://sky.pro/wiki/profession/) [Gadgets](https://sky.pro/wiki/gadgets/) [Money](https://sky.pro/wiki/money/) [Gamedev](https://sky.pro/wiki/gamedev/) [Marketing](https://sky.pro/wiki/marketing/) [Management](https://sky.pro/wiki/management/) [DigitalArt](https://sky.pro/wiki/digital-art/) [Analytics](https://sky.pro/wiki/analytics/) [Lifestyle](https://sky.pro/wiki/lifestyle/) [Media](https://sky.pro/wiki/media/) [AI](https://sky.pro/wiki/ai/) [Главная](https://sky.pro/) ![arrow](https://sky.pro/wiki/_next/static/media/nav-arrow.45d56d4a.svg) [Wiki](https://sky.pro/wiki/) ![arrow](https://sky.pro/wiki/_next/static/media/nav-arrow.45d56d4a.svg) [Python](https://sky.pro/wiki/python/) ![arrow](https://sky.pro/wiki/_next/static/media/nav-arrow.45d56d4a.svg) ΠŸΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Python-ΠΊΠΎΠ΄ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ прилоТСния: инструкция ΠΏΠΎ компиляции [ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ](https://sky.pro/courses/ai/minicourses_ai?utm_source=skypro_wiki&utm_campaign=https%3A%2F%2Fsky.pro%2Fwiki%2Fpython%2Fkak-kompilirovat-python-3%2F&utm_medium=top_banner_null) # ΠŸΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Python-ΠΊΠΎΠ΄ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ прилоТСния: инструкция ΠΏΠΎ компиляции [\#Π Π°Π·Π½ΠΎΠ΅](https://sky.pro/wiki/tags/raznoe/) ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ тСст, ΡƒΠ·Π½Π°ΠΉΡ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ профСссии ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Бколько Π²Π°ΠΌ Π»Π΅Ρ‚ 0% Π”ΠΎ 18 ΠžΡ‚ 18 Π΄ΠΎ 24 ΠžΡ‚ 25 Π΄ΠΎ 34 ΠžΡ‚ 35 Π΄ΠΎ 44 ΠžΡ‚ 45 Π΄ΠΎ 49 ΠžΡ‚ 50 Π΄ΠΎ 54 Π‘ΠΎΠ»ΡŒΡˆΠ΅ 55 **Для ΠΊΠΎΠ³ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ:** - Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π° Python, ΠΈΡ‰ΡƒΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ компиляции своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ - Π›ΡŽΠ΄ΠΈ, заинтСрСсованныС Π² распространСнии своих Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Π΅Π· установки ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° - ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»Ρ‹ Π² области IT, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ свои прилоТСния Π’Ρ‹ создали гСниальноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Python 3, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСловкая ситуация: "А Π³Π΄Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Python? ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π½Π΅ просто .exe Ρ„Π°ΠΉΠ»?" Π—Π½Π°ΠΊΠΎΠΌΠΎ, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? πŸ€” ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Python-ΠΊΠΎΠ΄Π° Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ β€” это тСхничСский квСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ вопросов Π΄Π°ΠΆΠ΅ Ρƒ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ваш .py Ρ„Π°ΠΉΠ» Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ распространСниС вашСго ПО ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Π³Π»Π°Π·. > Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Python-ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ всС аспСкты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° этом языкС? ΠšΡƒΡ€Ρ [ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅](https://sky.pro/courses/programming/python-web-course) ΠΎΡ‚ Skypro ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ вас Π² ΠΌΠΈΡ€ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ β€” ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ смогут ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ люди Π±Π΅Π· тСхничСских Π·Π½Π°Π½ΠΈΠΉ. ## ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ компиляции Python 3: ΠΌΠΈΡ„Ρ‹ ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Когда Ρ€Π΅Ρ‡ΡŒ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎ компиляции Python 3, ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ β€” Python ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ являСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Python выполняСтся строка Π·Π° строкой ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π° Π½Π΅ прСобразуСтся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² C++ ΠΈΠ»ΠΈ Java. 🐍 Однако это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ· Python-ΠΊΠΎΠ΄Π°. БущСствуСт нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ "компиляции" Python: - **Π‘Π°ΠΉΡ‚-компиляция**: Python автоматичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ (.pyc Ρ„Π°ΠΉΠ»Ρ‹), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ интСрпрСтируСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Python (PVM). Π­Ρ‚ΠΎ Π½Π΅ настоящая компиляция Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. - **Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° (packaging)**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ PyInstaller ΠΈΠ»ΠΈ py2exe "ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚" ваш ΠΊΠΎΠ΄ вмСстС с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Python ΠΈ всСми зависимостями Π² ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». - **Врансляция Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Cython ΠΈΠ»ΠΈ Nuitka пСрСводят Python-ΠΊΠΎΠ΄ Π² C/C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. > **АлСксСй ΠŸΠ΅Ρ‚Ρ€ΠΎΠ², тСхничСский Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€** Π― Π΄ΠΎΠ»Π³ΠΎ считал, Ρ‡Ρ‚ΠΎ компиляция Python β€” это ΠΌΠΈΡ„. Π’ нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠΎ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ настаивал Π½Π° поставкС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ самодостаточного прилоТСния, Π±Π΅Π· нСобходимости установки Python. РСшСниС ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ β€” PyInstaller ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ» наш ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» Π·Π° считанныС ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Π”Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Ρ‹Π» Π²Π½ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (ΠΎΠΊΠΎΠ»ΠΎ 60 ΠœΠ‘), Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ остался Π΄ΠΎΠ²ΠΎΠ»Π΅Π½. ОсобСнно ΠΏΠΎΡ€Π°Π΄ΠΎΠ²Π°Π»ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΈ строчки ΠΊΠΎΠ΄Π° для совмСстимости с компилятором. Π“Π»Π°Π²Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ β€” Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° C++ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° нСобходимости создания исполняСмого Ρ„Π°ΠΉΠ»Π°. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ основныС заблуТдСния ΠΎ компиляции Python: | **ΠœΠΈΡ„** | **Π Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ** | |---|---| | Python нСльзя ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ | МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python ΠΈ ΠΊΠΎΠ΄ | | Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Python Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ быстро, ΠΊΠ°ΠΊ C++ | Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² "компиляции" Python Π½Π΅ Π΄Π°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прироста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ | | ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ | Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ лишь Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ дСкомпиляции | | Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ | Π€Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ большой Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ | | ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… | Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (Windows, macOS, Linux) Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ | Π˜ΡΡ‚ΠΈΠ½Π½Π°Ρ Ρ†Π΅Π»ΡŒ "компиляции" Python β€” это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, сколько ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ распространСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ (Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни) Π·Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π°. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмого Ρ„Π°ΠΉΠ»Π° позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· установки Python ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. [![ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π½ для смСны профСссии](https://sky.pro/wiki/_next/static/media/change-profession.a746fa2e.webp)](https://sky.pro/promo/media/main-proftest?utm_source=skypro_wiki&utm_medium=side_banner&utm_campaign=https://sky.pro/wiki/) ## ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ инструмСнты для компиляции ΠΊΠΎΠ΄Π° Python 3 Для создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Python-ΠΊΠΎΠ΄Π° сущСствуСт нСсколько ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… инструмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ со своими прСимущСствами ΠΈ ограничСниями. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для компиляции Python 3. βš™οΈ | **Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚** | **ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹** | **ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°** | **НСдостатки** | **Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования** | |---|---|---|---|---| | PyInstaller | Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Python-скрипт, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ зависимости Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» | ΠšΡ€ΠΎΡΡ-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, простота использования, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ зависимостСй | Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, Π½Π΅ Π΄Π°Π΅Ρ‚ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ | Низкая | | Nuitka | ВранслируСт Python Π² C++, Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ | ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π»ΡƒΡ‡ΡˆΠ°Ρ Π·Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π° | Π‘Π»ΠΎΠΆΠ½Π΅Π΅ Π² настройкС, Π½Π΅ всС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ | БрСдняя | | Cython | ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π² C ΠΊΠΎΠ΄, Π·Π°Ρ‚Π΅ΠΌ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ | БущСствСнноС ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ | Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ измСнСния исходного ΠΊΠΎΠ΄Π°, Π½Π΅ для всСго прилоТСния | Высокая | | py2exe | Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ exe-Ρ„Π°ΠΉΠ»Ρ‹ для Windows | ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° использования, фокус Π½Π° Windows-прилоТСниях | Волько для Windows, устарСваСт | Низкая | | cx\_Freeze | Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ | ΠšΡ€ΠΎΡΡ-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° | Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС Ρ€ΡƒΡ‡Π½ΠΎΠΉ настройки для слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ | БрСдняя | **PyInstaller** β€” самый популярный Π²Ρ‹Π±ΠΎΡ€ благодаря простотС использования ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика": Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ваш ΠΊΠΎΠ΄, опрСдСляСт всС зависимости ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π² ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». ИдСальноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²: ``` pip install pyinstaller pyinstaller --onefile your_script.py ``` **Nuitka** прСдставляСт собой Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, транслируя Python-ΠΊΠΎΠ΄ Π² C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ-интСнсивных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ``` pip install nuitka python -m nuitka --follow-imports your_script.py ``` **Cython** β€” это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ инструмСнт для создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², сколько язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Python для компиляции Π² C. Он особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ частСй ΠΊΠΎΠ΄Π°: ``` pip install cython cythonize -i your_module.py ``` > **Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ Π‘ΠΎΠΊΠΎΠ»ΠΎΠ², DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€** Когда наша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»Π°ΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ развСртывания Python-прилоТСния Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° Π±Π΅Π· установки ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с PyInstaller. Всё Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Π½Π° тСстовых ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π½ΠΎ послС развСртывания Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: антивирусы часто ΠΏΠΎΠΌΠ΅Ρ‡Π°Π»ΠΈ наши исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ систСмныС зависимости Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. ПослС Π½Π΅Π΄Π΅Π»ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: использовали Nuitka для компиляции основного модуля (Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с антивирусами) ΠΈ PyInstaller для создания Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ дистрибутива. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎ врСмя сборки, Π½ΠΎ устранило всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ развСртывания. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Ρ‚Π°ΠΊΠΎΠΉ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ стал нашим стандартом для ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Для Π²Ρ‹Π±ΠΎΡ€Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящСго инструмСнта компиляции Python 3, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ критСриями: - **Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°**: Для простых скриптов достаточно PyInstaller, для слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Nuitka ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. - **ВрСбования ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ**: Если ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π°, рассмотритС Cython ΠΈΠ»ΠΈ Nuitka. - **ЦСлСвая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°**: Для Windows-спСцифичных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ py2exe ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅; для кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” PyInstaller ΠΈΠ»ΠΈ cx\_Freeze. - **Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΠ΄Π°**: Nuitka обСспСчиваСт Π»ΡƒΡ‡ΡˆΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ дСкомпиляции, Ρ‡Π΅ΠΌ PyInstaller. - **ВрСмя ΠΈ рСсурсы Π½Π° освоСниС**: PyInstaller ΠΈ py2exe Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… усилий для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹. НСзависимо ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ инструмСнта, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ компиляция Python β€” это компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ удобством распространСния, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΊΠΎΠ΄Π°. πŸ”§ ## PyInstaller: пошаговоС созданиС исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² PyInstaller β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ для Windows, macOS ΠΈ Linux. Рассмотрим ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ процСсс создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyInstaller. πŸ“¦ **Π¨Π°Π³ 1: Установка PyInstaller** ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PyInstaller Ρ‡Π΅Ρ€Π΅Π· pip: ``` pip install pyinstaller ``` Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚Ρƒ ΠΆΠ΅ Π²Π΅Ρ€ΡΠΈΡŽ Python, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. РСкомСндуСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² с систСмными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ: ``` python -m venv myenv source myenv/bin/activate # для Linux/macOS myenv\Scripts\activate # для Windows pip install -r requirements.txt # установитС зависимости вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° pip install pyinstaller ``` **Π¨Π°Π³ 2: Базовая компиляция** Для простого скрипта достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: ``` pyinstaller your_script.py ``` Π­Ρ‚ΠΎ создаст ΠΏΠ°ΠΏΠΊΡƒ "dist", Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ исполняСмый Ρ„Π°ΠΉΠ» ΠΈ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ PyInstaller создаёт ΠΏΠ°ΠΏΠΊΡƒ с нСсколькими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π° Π½Π΅ ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». **Π¨Π°Π³ 3: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°** Для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ всСго Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ `--onefile`: ``` pyinstaller --onefile your_script.py ``` Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ для распространСния, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ нСдостаток β€” Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ запуск, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС происходит распаковка Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ. **Π¨Π°Π³ 4: Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки** PyInstaller ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ мноТСство ΠΎΠΏΡ†ΠΈΠΉ для настройки процСсса компиляции: - **\--name**: Π·Π°Π΄Π°Π΅Ρ‚ имя исполняСмого Ρ„Π°ΠΉΠ»Π°: ``` pyinstaller --name=MyApp --onefile your_script.py ``` - **\--icon**: добавляСт Π·Π½Π°Ρ‡ΠΎΠΊ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Windows ΠΈ macOS): ``` pyinstaller --icon=path/to/icon.ico --onefile your_script.py ``` - **\--noconsole** (ΠΈΠ»ΠΈ `--windowed`): скрываСт консоль ΠΏΡ€ΠΈ запускС (для GUI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ): ``` pyinstaller --noconsole --onefile your_script.py ``` - **\--add-data**: Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ: ``` pyinstaller --add-data "path/to/data:data" --onefile your_script.py # Linux/macOS pyinstaller --add-data "path/to/data;data" --onefile your_script.py # Windows ``` **Π¨Π°Π³ 5: ИспользованиС spec-Ρ„Π°ΠΉΠ»Π° для слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²** Для слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ spec-Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ большС контроля Π½Π°Π΄ процСссом сборки: ``` pyinstaller --name=MyApp your_script.py ``` Π­Ρ‚ΠΎ создаст Ρ„Π°ΠΉΠ» MyApp.spec, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² сборки. ПослС рСдактирования ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ с использованиСм spec-Ρ„Π°ΠΉΠ»Π°: ``` pyinstaller MyApp.spec ``` ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки spec-Ρ„Π°ΠΉΠ»Π° для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ скрытых ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²: Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` # -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['your_script.py'], pathex=['/path/to/your/project'], binaries=[], datas=[('path/to/data', 'data')], hiddenimports=['ΠΌΠΎΠ΄ΡƒΠ»ΡŒ_ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ_Π½Π΅_Π±Ρ‹Π»_ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½_автоматичСски'], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='MyApp', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False, icon='path/to/icon.ico') ``` **Π¨Π°Π³ 6: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ тСстированиС** ПослС создания исполняСмого Ρ„Π°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° "чистой" систСмС Π±Π΅Π· установлСнного Python ΠΈ зависимостСй. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вашСго прилоТСния, особСнно Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ динамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ рСсурсы. **Π¨Π°Π³ 7: РСшСниС Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ** - **ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `--hidden-import` для явного указания ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ PyInstaller Π½Π΅ смог ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ автоматичСски: ``` pyinstaller --hidden-import=numpy --onefile your_script.py ``` - **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с путями ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ**: Π’Π½ΡƒΡ‚Ρ€ΠΈ скомпилированного прилоТСния ΠΏΡƒΡ‚ΠΈ ΠΊ рСсурсам ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ для опрСдСлСния ΠΏΡƒΡ‚ΠΈ ΠΊ рСсурсам: Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` import sys import os # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π»ΠΈ ΠΌΡ‹ ΠΈΠ· PyInstaller if getattr(sys, 'frozen', False): # ΠŸΡƒΡ‚ΡŒ ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅, созданной PyInstaller application_path = sys._MEIPASS else: # ΠŸΡƒΡ‚ΡŒ ΠΊ скрипту Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ application_path = os.path.dirname(os.path.abspath(__file__)) # Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ application_path для доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ data_file = os.path.join(application_path, 'data', 'config.json') ``` Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyInstaller β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ распространСния Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ срСди ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π±Π΅Π· нСобходимости установки Python. Однако, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ компромиссах: исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС исходного ΠΊΠΎΠ΄Π°, Π° запуск ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, особСнно ΠΏΡ€ΠΈ использовании ΠΎΠΏΡ†ΠΈΠΈ `--onefile`. πŸš€ ## ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° скомпилированного Python-ΠΊΠΎΠ΄Π° ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ компиляции Python-ΠΊΠΎΠ΄Π° Π² исполняСмый Ρ„Π°ΠΉΠ», ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π²ΡΡ‚Π°ΡŽΡ‚ Π΄Π²Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ: оптимизация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ собствСнности. Рассмотрим эффСктивныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих Π·Π°Π΄Π°Ρ‡. πŸ›‘οΈ **ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ скомпилированного ΠΊΠΎΠ΄Π°** 1. **УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° исполняСмого Ρ„Π°ΠΉΠ»Π°** - **Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `--exclude-module` Π² PyInstaller для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ: ``` pyinstaller --exclude-module matplotlib --onefile your_script.py ``` - **ИспользованиС UPX для сТатия**: UPX β€” это инструмСнт для сТатия исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€: ``` pyinstaller --upx-dir=/path/to/upx --onefile your_script.py ``` - **ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° зависимостСй**: ΠŸΠ΅Ρ€Π΅Π΄ компиляциСй ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: ``` pip install pipreqs pipreqs . --force pip install -r requirements.txt ``` 1. **УскорСниС запуска ΠΈ выполнСния** - **ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ структуры**: ΠžΠΏΡ†ΠΈΡ `--onedir` Π² PyInstaller создаёт Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ускоряСт запуск ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с `--onefile`, Π³Π΄Π΅ происходит распаковка Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС: ``` pyinstaller --onedir your_script.py ``` - **ИспользованиС Nuitka для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… частСй**: Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ-ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ части прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Nuitka, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΡ… Π² основном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: ``` python -m nuitka --module critical_module.py ``` - **ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Python ΠΏΡ€ΠΈ компиляции: ``` pyinstaller --python-option=O your_script.py ``` **Π—Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π° ΠΎΡ‚ дСкомпиляции** ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Python-ΠΊΠΎΠ΄ ΠΎΡ‚ дСкомпиляции Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сущСствСнно ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ этот процСсс: 1. **ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй** - **ИспользованиС PyArmor**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ для обфускации ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Python-скриптов: ``` pip install pyarmor pyarmor obfuscate your_script.py ``` - **ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ pyminifier ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹: ``` pip install pyminifier pyminifier --obfuscate your_script.py > obfuscated_script.py ``` 1. **Π—Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ компиляции** - **ИспользованиС Nuitka с Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ `--standalone`**: Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТнСС Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄: ``` python -m nuitka --standalone --follow-imports your_script.py ``` - **ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² C-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Cython для компиляции особо Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй ΠΊΠΎΠ΄Π°: Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` # sensitive_module.pyx def secret_algorithm(data): # Π’Π°Ρˆ Π²Π°ΠΆΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ return processed_data ``` Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` # setup.py from setuptools import setup from Cython.Build import cythonize setup( ext_modules = cythonize("sensitive_module.pyx") ) ``` ``` python setup.py build_ext --inplace ``` 1. **Π—Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ исполняСмого Ρ„Π°ΠΉΠ»Π°** - **Цифровая подпись**: ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ ваш исполняСмый Ρ„Π°ΠΉΠ» для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ нСсанкционированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: ``` # Для Windows с использованиСм signtool signtool sign /f certificate.pfx /p password /t http://timestamp.comodoca.com your_exe.exe ``` - **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности**: ВстройтС Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ запуск ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` import hashlib import sys def check_integrity(): # Для PyInstaller if getattr(sys, 'frozen', False): executable = sys.executable # ВычисляСм Ρ…Π΅Ρˆ исполняСмого Ρ„Π°ΠΉΠ»Π° hash_value = hashlib.sha256(open(executable, 'rb').read()).hexdigest() # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ соотвСтствиС извСстному Ρ…Π΅ΡˆΡƒ if hash_value != 'expected_hash_value': sys.exit("Integrity check failed") ``` **Баланс ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ** ΠŸΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π΅ скомпилированного Python-ΠΊΠΎΠ΄Π° Π²Π°ΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ аспСктами: | **АспСкт** | **ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ** | **ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹** | **ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡΡ‹** | |---|---|---|---| | Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° | UPX сТатиС, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ | Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠΈ с ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ | Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ большС ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ | | Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запуска | `--onedir` вмСсто `--onefile` | ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ ΠΈ цСлостности | Π—Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ запуск | | Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния | Cython, Nuitka для горячих участков | ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ | ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ | | Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΠ΄Π° | Минимальная ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ компиляции | PyArmor, Nuitka, C-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ | Π‘ΠΎΠ»Π΅Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ слоТнСС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ | | Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ | Широкая ΠΏΡ€ΠΈ использовании PyInstaller | ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ комплСксной Π·Π°Ρ‰ΠΈΡ‚Π΅ | НСобходимо тСстированиС Π½Π° всСх Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… | КомплСксная стратСгия Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ: 1. ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ исходного ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй. 2. ИспользованиС Nuitka ΠΈΠ»ΠΈ Cython для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². 3. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ обфусцированного ΠΊΠΎΠ΄Π° с PyInstaller. 4. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ цСлостности ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² лицСнзирования. 5. Цифровая подпись ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π½Π΅ сущСствуСт β€” Ρ†Π΅Π»ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ вашСго ΠΊΠΎΠ΄Π° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΡƒΠ΄ΠΎΡ‘ΠΌΠΊΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Ρ‘Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Π±ΠΎΠ»Π΅Π΅ Π»Ρ‘Π³ΠΊΡƒΡŽ Ρ†Π΅Π»ΡŒ. πŸ”’ ## ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ компиляции Python 3 ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠŸΡ€ΠΈ компиляции Python-ΠΊΠΎΠ΄Π° Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ рСгулярно ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с рядом Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС прСпятствия ΠΈ эффСктивныС способы ΠΈΡ… прСодолСния. πŸ› οΈ **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 1: ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² скомпилированном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ** Одна ΠΈΠ· самых частых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” PyInstaller ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты компиляции Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ всС зависимости, особСнно ΠΏΡ€ΠΈ использовании динамичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈΠ»ΠΈ Ρ€Π΅Π΄ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. **РСшСниС:** - Π―Π²Π½ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ скрытыС зависимости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `--hidden-import`: ``` pyinstaller --hidden-import=pandas.io.formats.excel your_script.py ``` - Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ…ΡƒΠΊ для слоТных зависимостСй (Ρ…ΡƒΠΊΠΈ β€” это Python-скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ PyInstaller ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ зависимости): Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` # hook-yourmodule.py from PyInstaller.utils.hooks import collect_data_files, collect_submodules # Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ hiddenimports = collect_submodules('yourmodule') # Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… datas = collect_data_files('yourmodule') ``` - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ `--debug` для выявлСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: ``` pyinstaller --debug=imports your_script.py ``` **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 2: ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов (изобраТСния, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ)** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ часто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов, особСнно Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ. **РСшСниС:** - Π―Π²Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ рСсурсы Π² процСсс компиляции: ``` pyinstaller --add-data "resources/images:resources/images" your_script.py ``` - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для опрСдСлСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· исходного ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΈΠ· скомпилированного Ρ„Π°ΠΉΠ»Π°: Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` def resource_path(relative_path): """ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ рСсурсу""" try: # PyInstaller создаёт Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ сохраняСт ΠΏΡƒΡ‚ΡŒ Π² _MEIPASS base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ config_path = resource_path("config.json") ``` **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 3: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ символы Π² Ρ€Π°Π·Π½Ρ‹Ρ… локалях ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ…. **РСшСниС:** - Π―Π²Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ: Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` with open(file_path, 'r', encoding='utf-8') as file: content = file.read() ``` - Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ Π² процСсс компиляции: Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` # Π’ вашСм ΠΊΠΎΠ΄Π΅ import locale locale.setlocale(locale.LC_ALL, '') # ΠŸΡ€ΠΈ компиляции с PyInstaller pyinstaller --hidden-import=babel.numbers your_script.py ``` **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 4: ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ с антивирусами** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ с PyInstaller Ρ„Π°ΠΉΠ»Ρ‹ часто ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ антивирусами ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасныС ΠΈΠ·-Π·Π° ΠΈΡ… структуры. **РСшСниС:** - ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ ваш исполняСмый Ρ„Π°ΠΉΠ» Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ сСртификатом: ``` signtool sign /f certificate.pfx /p password /t http://timestamp.comodoca.com your_exe.exe ``` - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ распространСния ΠΈ Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΡŽ вашСго Π±Ρ€Π΅Π½Π΄Π°. - РассмотритС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ компиляторы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Nuitka, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаёт Π±ΠΎΠ»Π΅Π΅ "ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅" исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹. **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 5: Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ²** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ большой Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ всС зависимости. **РСшСниС:** - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ UPX для сТатия (Ссли это Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с антивирусами): ``` pyinstaller --upx-dir=/path/to/upx --onefile your_script.py ``` - Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΈΡ… зависимости: ``` pyinstaller --exclude-module=numpy --exclude-module=matplotlib your_script.py ``` - ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ зависимости ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй: ``` pip install pipreqs pipreqs . --force # Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ requirements.txt Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ pip install -r requirements.txt # УстанавливаСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ``` **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 6: ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ каТутся совмСстимыми. **РСшСниС:** - ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ кросс-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ (для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ): ``` docker run --rm -v "$(pwd):/src/" cdrx/pyinstaller-windows:python3 "pyinstaller --onefile your_script.py" ``` - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ условныС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ для платформозависимых частСй ΠΊΠΎΠ΄Π°: Python Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ``` import sys if sys.platform.startswith('win'): import winreg # Волько для Windows elif sys.platform.startswith('linux'): import fcntl # Волько для Linux ``` **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 7: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ внСшними соСдинСниями** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ внСшним API. **РСшСниС:** - Π―Π²Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ: ``` pyinstaller --hidden-import=sqlite3 --hidden-import=pymysql your_script.py ``` - Для ODBC ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… слоТных соСдинСний Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ DLL Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ: ``` pyinstaller --add-binary "C:/Windows/System32/odbc32.dll:." your_script.py ``` **Бводная Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ** | **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°** | **Π‘ΠΈΠΌΠΏΡ‚ΠΎΠΌΡ‹** | **РСшСниС** | **Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹** | |---|---|---|---| | ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ | ImportError ΠΏΡ€ΠΈ запускС | Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ зависимостСй | `--hidden-import`, Ρ…ΡƒΠΊΠΈ | | ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с путями ΠΊ рСсурсам | FileNotFoundError | ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡƒΡ‚Π΅ΠΉ, `--add-data` | `sys._MEIPASS`, `resource_path()` | | ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ | UnicodeDecodeError | Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ | `encoding='utf-8'` | | АнтивирусныС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ | ΠšΠ°Ρ€Π°Π½Ρ‚ΠΈΠ½ Ρ„Π°ΠΉΠ»Π°, прСдупрСТдСния | Цифровая подпись, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ компиляторы | `signtool`, Nuitka | | Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° | \> 50MB для простых скриптов | ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ зависимостСй, сТатиС | UPX, `--exclude-module` | | ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ | Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ОБ, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ | ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ компиляция для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ | Docker, условныС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ | | ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π‘Π” | Ошибки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π” | Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², DLL | `--hidden-import`, `--add-binary` | Для комплСксных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² рСкомСндуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ скрипт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ компиляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ всС особСнности вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΎΠΉ скрипт ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, постобработку ΠΈ тСстированиС скомпилированного прилоТСния. НСсмотря Π½Π° всС слоТности, компиляция Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ β€” Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ Π·Π°Π΄Π°Ρ‡Π°. БистСматичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ диагностикС ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π² распространСнии прилоТСния. πŸš€ > Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Python-ΠΊΠΎΠ΄Π° β€” это Π½Π΅ просто тСхничСская опСрация, Π° стратСгичСскоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ возмоТности для распространСния Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Освоив инструмСнты Π²Ρ€ΠΎΠ΄Π΅ PyInstaller, Nuitka ΠΈΠ»ΠΈ Cython, Π²Ρ‹ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Π±Π°Ρ€ΡŒΠ΅Ρ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ, позволяя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π±Π΅Π· тСхничСских Π·Π½Π°Π½ΠΈΠΉ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ скомпилированноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” это визитная ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ дСталям. **Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅** - [Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€ Π½Π° Python: ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ ΠΎΡ‚ простого ΠΊ слоТному](https://sky.pro/wiki/python/sozdanie-igr-na-python-dlya-nachinayushih/) - [Python: ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык программирования для Π²Π΅Π±, Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ИИ](https://sky.pro/wiki/python/znachenie-python-v-sovremennom-programmirovanii/) - [ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…: учимся ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄](https://sky.pro/wiki/python/prostye-programmy-dlya-nachinayushih-na-python/) - [Π—Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π½Π° Python: 5 Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ для высокой Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ Π² IT](https://sky.pro/wiki/python/kak-zarabotat-na-python/) - [5 ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… способов ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ Π² Python](https://sky.pro/wiki/python/kak-poluchit-tekushij-put-v-python-3/) - [Python для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²: 15 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ΄Π° ΠΎΡ‚ простого ΠΊ слоТному](https://sky.pro/wiki/python/python-kody-dlya-nachinayushih/) - [Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π² Python: Π·Π°Ρ‰ΠΈΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ООП](https://sky.pro/wiki/python/inkapsulyaciya-v-python/) - [Как ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Python: ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎ 60% ΠΈ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ](https://sky.pro/wiki/python/kak-obnovit-python-do-poslednej-versii/) - [Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ путями Π² Python: os.path ΠΈΠ»ΠΈ pathlib для Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ](https://sky.pro/wiki/python/rabota-s-putyami-fajlov-v-python/) - [15 Π»ΡƒΡ‡ΡˆΠΈΡ… бСсплатных PDF-ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠ² Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… программистов](https://sky.pro/wiki/python/python-dlya-nachinayushih-luchshie-pdf-resursy/) ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒ ΠΊΠ°ΠΊ Ρ‚Ρ‹ усвоил ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠŸΡ€ΠΎΠΉΠ΄ΠΈ тСст ΠΈ ΡƒΠ·Π½Π°ΠΉ насколько Ρ‚Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ Какой инструмСнт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для компиляции Python-ΠΊΠΎΠ΄Π° Π² исполняСмый Ρ„Π°ΠΉΠ»? 1 / 5 PyInstaller pip virtualenv Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π’ΠΈΡ‚ΠΎΠ² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΎ сСрвисныС сфСры Π‘Π²Π΅ΠΆΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ [Π›ΡƒΡ‡ΡˆΠΈΠ΅ рСсурсы для Π²ΠΈΠ΄Π΅ΠΎ ΡƒΡ€ΠΎΠΊΠΎΠ² ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ](https://sky.pro/wiki/python/luchshie-resursy-dlya-video-urokov-po-programmirovaniyu/) 6 сСнтября 2024 [Как ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Python Π½Π° Android](https://sky.pro/wiki/python/kak-skachat-i-ustanovit-python-na-android/) 6 сСнтября 2024 [Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ API ChatGPT: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…](https://sky.pro/wiki/python/kak-ispolzovat-api-chatgpt-rukovodstvo-dlya-nachinayushih/) 6 сСнтября 2024 #### Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°... Навигация ΠΏΠΎ ΡΡ‚Π°Ρ‚ΡŒΠ΅ [![ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π½ для смСны профСссии](https://sky.pro/wiki/_next/static/media/change-profession.a746fa2e.webp)](https://sky.pro/promo/media/main-proftest?utm_source=skypro_wiki&utm_medium=side_banner&utm_campaign=https://sky.pro/wiki/) [![logo](https://sky.pro/wiki/_next/static/media/logo.7310b88b.svg)](https://sky.pro/) ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ [\+7 495 137 85 99](tel:+74951378599) [skypro-support@skyeng.ru](mailto:skypro-support@skyeng.ru) O Skypro [ΠžΡ‚Π·Ρ‹Π²Ρ‹](https://sky.pro/reviews/?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) [ВсС профСссии](https://sky.pro/courses/?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) [Условия использования](https://legal.sky.pro/doc/view/terms-of-use-skypro) [ВСст Π½Π° ΠΏΡ€ΠΎΡ„ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ](https://sky.pro/test-na-proforientaciyu) ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΈ [Аналитик Π΄Π°Π½Π½Ρ‹Ρ…](https://sky.pro/courses/analytics/data_analytics?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) [ВСстировщик](https://sky.pro/courses/programming/qa-engineer?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) [Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ](https://sky.pro/courses/programming/python-web-course?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) [Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ](https://sky.pro/courses/programming/java-developer?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) [Π’Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ](https://sky.pro/courses/programming/web-developer?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) [ГрафичСский Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€](https://sky.pro/courses/design/graf-designer?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) [Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚ΠΎΠ»ΠΎΠ³](https://sky.pro/courses/marketing/internet-marketolog?utm_source=skypro_wiki_seo&utm_medium=free&utm_campaign=n_skypro_wiki%7Cpr_%7Cfu_product%7Cma_litunova%7Cown_b2c%7Ccnt_RU%7Cbr_Skypro%7Cchg_smm%7Cdt_31-01-2024) Β© Skypro 2026 [![vk](https://sky.pro/wiki/_next/static/media/vk.dc33d87a.svg)](https://go.sky.pro/vkontakte_main) [![telegram](https://sky.pro/wiki/_next/static/media/tg.8eaf1a91.svg)](https://go.sky.pro/telegram_main) [![youtube](https://sky.pro/wiki/_next/static/media/youtube.fb920da0.svg)](https://go.sky.pro/YouTube_main)
Readable Markdown
[\#Π Π°Π·Π½ΠΎΠ΅](https://sky.pro/wiki/tags/raznoe/) ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ тСст, ΡƒΠ·Π½Π°ΠΉΡ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ профСссии ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Бколько Π²Π°ΠΌ Π»Π΅Ρ‚ 0% Π”ΠΎ 18 ΠžΡ‚ 18 Π΄ΠΎ 24 ΠžΡ‚ 25 Π΄ΠΎ 34 ΠžΡ‚ 35 Π΄ΠΎ 44 ΠžΡ‚ 45 Π΄ΠΎ 49 ΠžΡ‚ 50 Π΄ΠΎ 54 Π‘ΠΎΠ»ΡŒΡˆΠ΅ 55 **Для ΠΊΠΎΠ³ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ:** - Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π° Python, ΠΈΡ‰ΡƒΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ компиляции своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ - Π›ΡŽΠ΄ΠΈ, заинтСрСсованныС Π² распространСнии своих Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Π΅Π· установки ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° - ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»Ρ‹ Π² области IT, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ свои прилоТСния Π’Ρ‹ создали гСниальноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Python 3, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСловкая ситуация: "А Π³Π΄Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Python? ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π½Π΅ просто .exe Ρ„Π°ΠΉΠ»?" Π—Π½Π°ΠΊΠΎΠΌΠΎ, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? πŸ€” ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Python-ΠΊΠΎΠ΄Π° Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ β€” это тСхничСский квСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ вопросов Π΄Π°ΠΆΠ΅ Ρƒ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ваш .py Ρ„Π°ΠΉΠ» Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ распространСниС вашСго ПО ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Π³Π»Π°Π·. > Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Python-ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ всС аспСкты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° этом языкС? ΠšΡƒΡ€Ρ [ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅](https://sky.pro/courses/programming/python-web-course) ΠΎΡ‚ Skypro ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ вас Π² ΠΌΠΈΡ€ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ β€” ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ смогут ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ люди Π±Π΅Π· тСхничСских Π·Π½Π°Π½ΠΈΠΉ. ## ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ компиляции Python 3: ΠΌΠΈΡ„Ρ‹ ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Когда Ρ€Π΅Ρ‡ΡŒ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎ компиляции Python 3, ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ β€” Python ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ являСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Python выполняСтся строка Π·Π° строкой ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π° Π½Π΅ прСобразуСтся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² C++ ΠΈΠ»ΠΈ Java. 🐍 Однако это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ· Python-ΠΊΠΎΠ΄Π°. БущСствуСт нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ "компиляции" Python: - **Π‘Π°ΠΉΡ‚-компиляция**: Python автоматичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ (.pyc Ρ„Π°ΠΉΠ»Ρ‹), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ интСрпрСтируСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Python (PVM). Π­Ρ‚ΠΎ Π½Π΅ настоящая компиляция Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. - **Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° (packaging)**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ PyInstaller ΠΈΠ»ΠΈ py2exe "ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚" ваш ΠΊΠΎΠ΄ вмСстС с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Python ΠΈ всСми зависимостями Π² ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». - **Врансляция Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Cython ΠΈΠ»ΠΈ Nuitka пСрСводят Python-ΠΊΠΎΠ΄ Π² C/C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. > **АлСксСй ΠŸΠ΅Ρ‚Ρ€ΠΎΠ², тСхничСский Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€** Π― Π΄ΠΎΠ»Π³ΠΎ считал, Ρ‡Ρ‚ΠΎ компиляция Python β€” это ΠΌΠΈΡ„. Π’ нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠΎ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ настаивал Π½Π° поставкС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ самодостаточного прилоТСния, Π±Π΅Π· нСобходимости установки Python. РСшСниС ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ β€” PyInstaller ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ» наш ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» Π·Π° считанныС ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Π”Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Ρ‹Π» Π²Π½ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (ΠΎΠΊΠΎΠ»ΠΎ 60 ΠœΠ‘), Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ остался Π΄ΠΎΠ²ΠΎΠ»Π΅Π½. ОсобСнно ΠΏΠΎΡ€Π°Π΄ΠΎΠ²Π°Π»ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΈ строчки ΠΊΠΎΠ΄Π° для совмСстимости с компилятором. Π“Π»Π°Π²Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ β€” Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° C++ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° нСобходимости создания исполняСмого Ρ„Π°ΠΉΠ»Π°. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ основныС заблуТдСния ΠΎ компиляции Python: | **ΠœΠΈΡ„** | **Π Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ** | |---|---| | Python нСльзя ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ | МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python ΠΈ ΠΊΠΎΠ΄ | | Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Python Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ быстро, ΠΊΠ°ΠΊ C++ | Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² "компиляции" Python Π½Π΅ Π΄Π°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прироста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ | | ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ | Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ лишь Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ дСкомпиляции | | Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ | Π€Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ большой Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ | | ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… | Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (Windows, macOS, Linux) Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ | Π˜ΡΡ‚ΠΈΠ½Π½Π°Ρ Ρ†Π΅Π»ΡŒ "компиляции" Python β€” это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, сколько ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ распространСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ (Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни) Π·Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π°. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмого Ρ„Π°ΠΉΠ»Π° позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· установки Python ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. [![ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π½ для смСны профСссии](https://sky.pro/wiki/_next/static/media/change-profession.a746fa2e.webp)](https://sky.pro/promo/media/main-proftest?utm_source=skypro_wiki&utm_medium=side_banner&utm_campaign=https://sky.pro/wiki/) ## ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ инструмСнты для компиляции ΠΊΠΎΠ΄Π° Python 3 Для создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Python-ΠΊΠΎΠ΄Π° сущСствуСт нСсколько ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… инструмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ со своими прСимущСствами ΠΈ ограничСниями. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для компиляции Python 3. βš™οΈ | **Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚** | **ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹** | **ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°** | **НСдостатки** | **Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования** | |---|---|---|---|---| | PyInstaller | Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Python-скрипт, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ зависимости Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» | ΠšΡ€ΠΎΡΡ-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, простота использования, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ зависимостСй | Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, Π½Π΅ Π΄Π°Π΅Ρ‚ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ | Низкая | | Nuitka | ВранслируСт Python Π² C++, Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ | ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π»ΡƒΡ‡ΡˆΠ°Ρ Π·Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π° | Π‘Π»ΠΎΠΆΠ½Π΅Π΅ Π² настройкС, Π½Π΅ всС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ | БрСдняя | | Cython | ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π² C ΠΊΠΎΠ΄, Π·Π°Ρ‚Π΅ΠΌ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ | БущСствСнноС ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ | Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ измСнСния исходного ΠΊΠΎΠ΄Π°, Π½Π΅ для всСго прилоТСния | Высокая | | py2exe | Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ exe-Ρ„Π°ΠΉΠ»Ρ‹ для Windows | ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° использования, фокус Π½Π° Windows-прилоТСниях | Волько для Windows, устарСваСт | Низкая | | cx\_Freeze | Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ | ΠšΡ€ΠΎΡΡ-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° | Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС Ρ€ΡƒΡ‡Π½ΠΎΠΉ настройки для слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ | БрСдняя | **PyInstaller** β€” самый популярный Π²Ρ‹Π±ΠΎΡ€ благодаря простотС использования ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика": Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ваш ΠΊΠΎΠ΄, опрСдСляСт всС зависимости ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π² ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». ИдСальноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²: **Nuitka** прСдставляСт собой Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, транслируя Python-ΠΊΠΎΠ΄ Π² C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ-интСнсивных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: **Cython** β€” это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ инструмСнт для создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², сколько язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Python для компиляции Π² C. Он особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ частСй ΠΊΠΎΠ΄Π°: > **Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ Π‘ΠΎΠΊΠΎΠ»ΠΎΠ², DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€** Когда наша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»Π°ΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ развСртывания Python-прилоТСния Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° Π±Π΅Π· установки ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с PyInstaller. Всё Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Π½Π° тСстовых ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π½ΠΎ послС развСртывания Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: антивирусы часто ΠΏΠΎΠΌΠ΅Ρ‡Π°Π»ΠΈ наши исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ систСмныС зависимости Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. ПослС Π½Π΅Π΄Π΅Π»ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: использовали Nuitka для компиляции основного модуля (Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с антивирусами) ΠΈ PyInstaller для создания Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ дистрибутива. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎ врСмя сборки, Π½ΠΎ устранило всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ развСртывания. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Ρ‚Π°ΠΊΠΎΠΉ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ стал нашим стандартом для ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Для Π²Ρ‹Π±ΠΎΡ€Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящСго инструмСнта компиляции Python 3, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ критСриями: - **Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°**: Для простых скриптов достаточно PyInstaller, для слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Nuitka ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. - **ВрСбования ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ**: Если ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π°, рассмотритС Cython ΠΈΠ»ΠΈ Nuitka. - **ЦСлСвая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°**: Для Windows-спСцифичных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ py2exe ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅; для кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” PyInstaller ΠΈΠ»ΠΈ cx\_Freeze. - **Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΠ΄Π°**: Nuitka обСспСчиваСт Π»ΡƒΡ‡ΡˆΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ дСкомпиляции, Ρ‡Π΅ΠΌ PyInstaller. - **ВрСмя ΠΈ рСсурсы Π½Π° освоСниС**: PyInstaller ΠΈ py2exe Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… усилий для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹. НСзависимо ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ инструмСнта, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ компиляция Python β€” это компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ удобством распространСния, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΊΠΎΠ΄Π°. πŸ”§ ## PyInstaller: пошаговоС созданиС исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² PyInstaller β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ для Windows, macOS ΠΈ Linux. Рассмотрим ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ процСсс создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyInstaller. πŸ“¦ **Π¨Π°Π³ 1: Установка PyInstaller** ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PyInstaller Ρ‡Π΅Ρ€Π΅Π· pip: Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚Ρƒ ΠΆΠ΅ Π²Π΅Ρ€ΡΠΈΡŽ Python, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. РСкомСндуСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² с систСмными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ: **Π¨Π°Π³ 2: Базовая компиляция** Для простого скрипта достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: Π­Ρ‚ΠΎ создаст ΠΏΠ°ΠΏΠΊΡƒ "dist", Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ исполняСмый Ρ„Π°ΠΉΠ» ΠΈ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ PyInstaller создаёт ΠΏΠ°ΠΏΠΊΡƒ с нСсколькими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π° Π½Π΅ ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ». **Π¨Π°Π³ 3: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°** Для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ всСго Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ `--onefile`: Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ для распространСния, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ нСдостаток β€” Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ запуск, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС происходит распаковка Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ. **Π¨Π°Π³ 4: Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки** PyInstaller ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ мноТСство ΠΎΠΏΡ†ΠΈΠΉ для настройки процСсса компиляции: - **\--name**: Π·Π°Π΄Π°Π΅Ρ‚ имя исполняСмого Ρ„Π°ΠΉΠ»Π°: - **\--icon**: добавляСт Π·Π½Π°Ρ‡ΠΎΠΊ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Windows ΠΈ macOS): - **\--noconsole** (ΠΈΠ»ΠΈ `--windowed`): скрываСт консоль ΠΏΡ€ΠΈ запускС (для GUI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ): - **\--add-data**: Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ: **Π¨Π°Π³ 5: ИспользованиС spec-Ρ„Π°ΠΉΠ»Π° для слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²** Для слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ spec-Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ большС контроля Π½Π°Π΄ процСссом сборки: Π­Ρ‚ΠΎ создаст Ρ„Π°ΠΉΠ» MyApp.spec, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² сборки. ПослС рСдактирования ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ с использованиСм spec-Ρ„Π°ΠΉΠ»Π°: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки spec-Ρ„Π°ΠΉΠ»Π° для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ скрытых ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²: **Π¨Π°Π³ 6: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ тСстированиС** ПослС создания исполняСмого Ρ„Π°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° "чистой" систСмС Π±Π΅Π· установлСнного Python ΠΈ зависимостСй. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вашСго прилоТСния, особСнно Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ динамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ рСсурсы. **Π¨Π°Π³ 7: РСшСниС Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ** - **ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `--hidden-import` для явного указания ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ PyInstaller Π½Π΅ смог ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ автоматичСски: - **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с путями ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ**: Π’Π½ΡƒΡ‚Ρ€ΠΈ скомпилированного прилоТСния ΠΏΡƒΡ‚ΠΈ ΠΊ рСсурсам ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ для опрСдСлСния ΠΏΡƒΡ‚ΠΈ ΠΊ рСсурсам: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyInstaller β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ распространСния Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ срСди ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π±Π΅Π· нСобходимости установки Python. Однако, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ компромиссах: исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС исходного ΠΊΠΎΠ΄Π°, Π° запуск ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, особСнно ΠΏΡ€ΠΈ использовании ΠΎΠΏΡ†ΠΈΠΈ `--onefile`. πŸš€ ## ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° скомпилированного Python-ΠΊΠΎΠ΄Π° ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ компиляции Python-ΠΊΠΎΠ΄Π° Π² исполняСмый Ρ„Π°ΠΉΠ», ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π²ΡΡ‚Π°ΡŽΡ‚ Π΄Π²Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ: оптимизация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ собствСнности. Рассмотрим эффСктивныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих Π·Π°Π΄Π°Ρ‡. πŸ›‘οΈ **ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ скомпилированного ΠΊΠΎΠ΄Π°** 1. **УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° исполняСмого Ρ„Π°ΠΉΠ»Π°** - **Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `--exclude-module` Π² PyInstaller для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ: - **ИспользованиС UPX для сТатия**: UPX β€” это инструмСнт для сТатия исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€: - **ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° зависимостСй**: ΠŸΠ΅Ρ€Π΅Π΄ компиляциСй ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: 1. **УскорСниС запуска ΠΈ выполнСния** - **ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ структуры**: ΠžΠΏΡ†ΠΈΡ `--onedir` Π² PyInstaller создаёт Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ускоряСт запуск ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с `--onefile`, Π³Π΄Π΅ происходит распаковка Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС: - **ИспользованиС Nuitka для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… частСй**: Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ-ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ части прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Nuitka, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΡ… Π² основном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: - **ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Python ΠΏΡ€ΠΈ компиляции: **Π—Π°Ρ‰ΠΈΡ‚Π° исходного ΠΊΠΎΠ΄Π° ΠΎΡ‚ дСкомпиляции** ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Python-ΠΊΠΎΠ΄ ΠΎΡ‚ дСкомпиляции Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сущСствСнно ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ этот процСсс: 1. **ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй** - **ИспользованиС PyArmor**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ для обфускации ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Python-скриптов: - **ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ pyminifier ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹: 1. **Π—Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ компиляции** - **ИспользованиС Nuitka с Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ `--standalone`**: Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТнСС Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄: - **ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² C-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Cython для компиляции особо Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй ΠΊΠΎΠ΄Π°: 1. **Π—Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ исполняСмого Ρ„Π°ΠΉΠ»Π°** - **Цифровая подпись**: ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ ваш исполняСмый Ρ„Π°ΠΉΠ» для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ нСсанкционированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: - **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности**: ВстройтС Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ запуск ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: **Баланс ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ** ΠŸΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π΅ скомпилированного Python-ΠΊΠΎΠ΄Π° Π²Π°ΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ аспСктами: | **АспСкт** | **ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ** | **ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹** | **ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡΡ‹** | |---|---|---|---| | Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° | UPX сТатиС, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ | Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠΈ с ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ | Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ большС ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ | | Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запуска | `--onedir` вмСсто `--onefile` | ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ ΠΈ цСлостности | Π—Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ запуск | | Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния | Cython, Nuitka для горячих участков | ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ | ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ | | Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΠ΄Π° | Минимальная ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ компиляции | PyArmor, Nuitka, C-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ | Π‘ΠΎΠ»Π΅Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ слоТнСС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ | | Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ | Широкая ΠΏΡ€ΠΈ использовании PyInstaller | ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ комплСксной Π·Π°Ρ‰ΠΈΡ‚Π΅ | НСобходимо тСстированиС Π½Π° всСх Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… | КомплСксная стратСгия Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ: 1. ΠžΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡ исходного ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй. 2. ИспользованиС Nuitka ΠΈΠ»ΠΈ Cython для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². 3. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ обфусцированного ΠΊΠΎΠ΄Π° с PyInstaller. 4. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ цСлостности ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² лицСнзирования. 5. Цифровая подпись ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π½Π΅ сущСствуСт β€” Ρ†Π΅Π»ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ вашСго ΠΊΠΎΠ΄Π° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΡƒΠ΄ΠΎΡ‘ΠΌΠΊΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Ρ‘Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Π±ΠΎΠ»Π΅Π΅ Π»Ρ‘Π³ΠΊΡƒΡŽ Ρ†Π΅Π»ΡŒ. πŸ”’ ## ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ компиляции Python 3 ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠŸΡ€ΠΈ компиляции Python-ΠΊΠΎΠ΄Π° Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ рСгулярно ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с рядом Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС прСпятствия ΠΈ эффСктивныС способы ΠΈΡ… прСодолСния. πŸ› οΈ **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 1: ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² скомпилированном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ** Одна ΠΈΠ· самых частых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” PyInstaller ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты компиляции Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ всС зависимости, особСнно ΠΏΡ€ΠΈ использовании динамичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈΠ»ΠΈ Ρ€Π΅Π΄ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. **РСшСниС:** - Π―Π²Π½ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ скрытыС зависимости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `--hidden-import`: - Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ…ΡƒΠΊ для слоТных зависимостСй (Ρ…ΡƒΠΊΠΈ β€” это Python-скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ PyInstaller ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ зависимости): - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ `--debug` для выявлСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 2: ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов (изобраТСния, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ)** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ часто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов, особСнно Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ. **РСшСниС:** - Π―Π²Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ рСсурсы Π² процСсс компиляции: - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для опрСдСлСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· исходного ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΈΠ· скомпилированного Ρ„Π°ΠΉΠ»Π°: **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 3: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ символы Π² Ρ€Π°Π·Π½Ρ‹Ρ… локалях ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ…. **РСшСниС:** - Π―Π²Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ: - Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ Π² процСсс компиляции: **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 4: ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ с антивирусами** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ с PyInstaller Ρ„Π°ΠΉΠ»Ρ‹ часто ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ антивирусами ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасныС ΠΈΠ·-Π·Π° ΠΈΡ… структуры. **РСшСниС:** - ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ ваш исполняСмый Ρ„Π°ΠΉΠ» Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ сСртификатом: - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ распространСния ΠΈ Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΡŽ вашСго Π±Ρ€Π΅Π½Π΄Π°. - РассмотритС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ компиляторы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Nuitka, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаёт Π±ΠΎΠ»Π΅Π΅ "ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅" исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹. **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 5: Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ²** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ большой Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ всС зависимости. **РСшСниС:** - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ UPX для сТатия (Ссли это Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с антивирусами): - Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΈΡ… зависимости: - ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ зависимости ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй: **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 6: ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ каТутся совмСстимыми. **РСшСниС:** - ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ кросс-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ (для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ): - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ условныС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ для платформозависимых частСй ΠΊΠΎΠ΄Π°: **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 7: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ внСшними соСдинСниями** Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ внСшним API. **РСшСниС:** - Π―Π²Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ: - Для ODBC ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… слоТных соСдинСний Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ DLL Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ: **Бводная Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ** | **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°** | **Π‘ΠΈΠΌΠΏΡ‚ΠΎΠΌΡ‹** | **РСшСниС** | **Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹** | |---|---|---|---| | ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ | ImportError ΠΏΡ€ΠΈ запускС | Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ зависимостСй | `--hidden-import`, Ρ…ΡƒΠΊΠΈ | | ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с путями ΠΊ рСсурсам | FileNotFoundError | ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡƒΡ‚Π΅ΠΉ, `--add-data` | `sys._MEIPASS`, `resource_path()` | | ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ | UnicodeDecodeError | Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ | `encoding='utf-8'` | | АнтивирусныС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ | ΠšΠ°Ρ€Π°Π½Ρ‚ΠΈΠ½ Ρ„Π°ΠΉΠ»Π°, прСдупрСТдСния | Цифровая подпись, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ компиляторы | `signtool`, Nuitka | | Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° | \> 50MB для простых скриптов | ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ зависимостСй, сТатиС | UPX, `--exclude-module` | | ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ | Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ОБ, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ | ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ компиляция для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ | Docker, условныС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ | | ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π‘Π” | Ошибки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π” | Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², DLL | `--hidden-import`, `--add-binary` | Для комплСксных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² рСкомСндуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ скрипт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ компиляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ всС особСнности вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΎΠΉ скрипт ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, постобработку ΠΈ тСстированиС скомпилированного прилоТСния. НСсмотря Π½Π° всС слоТности, компиляция Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ β€” Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ Π·Π°Π΄Π°Ρ‡Π°. БистСматичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ диагностикС ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π² распространСнии прилоТСния. πŸš€ > Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Python-ΠΊΠΎΠ΄Π° β€” это Π½Π΅ просто тСхничСская опСрация, Π° стратСгичСскоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ возмоТности для распространСния Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Освоив инструмСнты Π²Ρ€ΠΎΠ΄Π΅ PyInstaller, Nuitka ΠΈΠ»ΠΈ Cython, Π²Ρ‹ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Π±Π°Ρ€ΡŒΠ΅Ρ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ, позволяя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π±Π΅Π· тСхничСских Π·Π½Π°Π½ΠΈΠΉ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ скомпилированноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” это визитная ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ дСталям. **Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅**
Shard181 (laksa)
Root Hash18009342750325351181
Unparsed URLpro,sky!/wiki/python/kak-kompilirovat-python-3/ s443