πŸ”“ Как бСзопасно Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ .exe Ρ„Π°ΠΉΠ» Π² Python Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π°

Для распаковки Ρ„Π°ΠΉΠ»Π° .exe, созданного с использованиСм Python, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтами, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ PyInstaller, py2exe ΠΈΠ»ΠΈ cx_Freeze. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования PyInstaller:

pip install pyinstaller # УстановитС PyInstaller (Ссли Π½Π΅ установлСн)
pyinstaller --onefile script.py # Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ исполняСмый Ρ„Π°ΠΉΠ» .exe

ПослС выполнСния этих шагов, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ исполняСмый Ρ„Π°ΠΉΠ» .exe, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π±Π΅Π· установки Python. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваш скрипт ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .py, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ script.py, ΠΈ находится Π² ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠΌ PyInstaller.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ exe python

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» (.exe) Python. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ распаковки exe-Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ структуру, внСсти измСнСния ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ exe-Ρ„Π°ΠΉΠ». .exe - это исполняСмый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π΅Π΅ запуска Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π’ нашСм случаС Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Python-скриптС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» скомпилирован Π² exe-Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта pyinstaller.

1. Распаковка exe-Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyInstaller

PyInstaller - это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных инструмСнтов для компиляции Python-скриптов Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹. Он позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ exe-Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Π±Π΅Π· установлСнного ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ exe-Ρ„Π°ΠΉΠ», созданный с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyInstaller, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:

pyinstaller --onedir --noconsole script.py

Π—Π΄Π΅ΡΡŒ --onedir ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с распакованными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π° --noconsole скрываСт консольноС ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ПослС выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ появился Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌ с ΠΈΠΌΠ΅Π½Π΅ΠΌ вашСго скрипта. Π’ этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ всС Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² Ρ‚ΠΎΠΌ числС исходный ΠΊΠΎΠ΄ Python.

2. ИспользованиС PyInstaller Hooks

PyInstaller Hooks - это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ PyInstaller ΠΏΡ€ΠΈ компиляции ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ Python-скриптов. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Hooks Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ PyInstaller, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ зависимости слСдуСт Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² исполняСмый Ρ„Π°ΠΉΠ».

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ exe-Ρ„Π°ΠΉΠ» ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ Python, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ внСсти измСнСния Π² Ρ„Π°ΠΉΠ» Hook-скрипта, связанного с вашим exe-Ρ„Π°ΠΉΠ»ΠΎΠΌ. Hook-скрипты ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Python-скриптами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ PyInstaller ΠΏΡ€ΠΈ компиляции.

Π’ Ρ„Π°ΠΉΠ»Π΅ Hook-скрипта Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для копирования исходного ΠΊΠΎΠ΄Π° Python Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с распакованными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² Hook-скрипт:

# hook-script.py

import os
import shutil

def copy_source_files(hook_api):
    script_path = hook_api.get_script_path()
    script_directory = os.path.dirname(script_path)
    source_directory = os.path.join(script_directory, "src")
    destination_directory = os.path.join(script_directory, "dist")

    if not os.path.exists(destination_directory):
        os.makedirs(destination_directory)
    
    for root, dirs, files in os.walk(source_directory):
        for file in files:
            source_file = os.path.join(root, file)
            destination_file = os.path.join(destination_directory, os.path.relpath(source_file, source_directory))
            shutil.copy2(source_file, destination_file)

# Register the hook
datas = [
    ("src", ".")
]

hiddenimports = [
    "your_module"
]

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ "dist" Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ скрипта ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° "src" Π² этот Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ рСгистрируСм Hook-скрипт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… datas ΠΈ hiddenimports .

ПослС внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Hook-скрипт, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ компиляции PyInstaller, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ exe-Ρ„Π°ΠΉΠ» с распакованными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ исходным ΠΊΠΎΠ΄ΠΎΠΌ Python.

3. Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ исходного ΠΊΠΎΠ΄Π° ΠΈΠ· скомпилированного exe-Ρ„Π°ΠΉΠ»Π° (ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ инТСнСрия)

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ исходный ΠΊΠΎΠ΄ Python ΠΈΠ· скомпилированного exe-Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ компиляции, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтами ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ.

Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… инструмСнтов являСтся decompyle3, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ скомпилированный Python-ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² исходный ΠΊΠΎΠ΄.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ decompyle3, установитС Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pip:

pip install uncompyle3

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ exe-Ρ„Π°ΠΉΠ»:

uncompyle6 script.pyc

Π“Π΄Π΅ script.pyc - это скомпилированный Ρ„Π°ΠΉΠ» Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ПослС выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ исходный ΠΊΠΎΠ΄ Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли нСсколько способов Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» Python (.exe). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PyInstaller для создания ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с распакованными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Hook-скрипт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ Python. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ исходный ΠΊΠΎΠ΄, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтами ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ decompyle3. НадСюсь, эта информация окаТСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для вас!

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Python Π² .EXE β–Ί КАК?

Π£Ρ€ΠΎΠΊΠΈ Python / Как Π² PyCharm ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ EXE Ρ„Π°ΠΉΠ»

Python Π² EXE

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

🐍 Как ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ ΠΏΠΈΡ‚ΠΎΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ: совСты ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ!

:sparkles: Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² Python? :sparkles:

βš™οΈ Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠŸΠΈΡ‚ΠΎΠ½ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: пошаговая инструкция для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

πŸ”“ Как бСзопасно Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ .exe Ρ„Π°ΠΉΠ» Π² Python Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π°

πŸ”’ Как пСрСвСсти число ΠΈΠ· 10 Π² 2 систСму счислСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python?

Как Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ логичСскиС выраТСния Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅: простой Π³ΠΈΠ΄ с эмодзи 😊

🐍 Бколько стоит Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΆΠ° ΠΏΠΈΡ‚ΠΎΠ½Π°? Π£Π·Π½Π°ΠΉΡ‚Π΅ Ρ†Π΅Π½Ρ‹ ΠΈ прСдлоТСния здСсь! πŸ›οΈ