Π—Π°Ρ‰ΠΈΡ‚Π° ΠΏΠΈΡ‚ΠΎΠ½: Максимальная Π·Π°Ρ‰ΠΈΡ‚Π°

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠœΠ΅Ρ…Π°Π½ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡƒΠ³ΠΎΠ½Π½ΠΎΠ΅ устройство Β«ΠŸΠΈΡ‚ΠΎΠ½Β» 83/380 Артикул: 39814

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡƒΠ³ΠΎΠ½Π½ΠΎΠ΅ мСханичСскоС устройство Β«ΠŸΠΈΡ‚ΠΎΠ½Β» ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π»Π΅Π³ΠΊΠΎΠ²ΠΎΠ³ΠΎ автомобиля ΠΎΡ‚ ΡƒΠ³ΠΎΠ½Π°. По статистикС срСднСС врСмя ΡƒΠ³ΠΎΠ½Π° автомобиля составляСт 2-3 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Π›ΡŽΠ±ΠΎΠ΅ мСханичСскоС воздСйствиС Π½Π° Ρ€ΡƒΠ»Π΅Π²ΠΎΠ΅ колСсо ΠΈ, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ это врСмя Π² дСсятки Ρ€Π°Π·, пониТая Ρ†Π΅Π»Π΅ΡΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ ΡƒΠ³ΠΎΠ½Π° автомобиля ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ° Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ мСханичСской Π·Π°Ρ‰ΠΈΡ‚Ρ‹.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Β«ΠŸΠΈΡ‚ΠΎΠ½Β» для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ автомобиля ΠΎΡ‚ ΡƒΠ³ΠΎΠ½Π°:

  • Β ΠœΠΎΡ‰Π½Π°Ρ видимая Π·Π°Ρ‰ΠΈΡ‚Π°. Π£Π³ΠΎΠ½Ρ‰ΠΈΠΊ Π²ΠΈΠ΄ΠΈΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ.
  • Β Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ вскрытиС популярными способами.
  •  НС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° – Π±Π΅Ρ€ΠΈ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡΡ!
  • Β Π›Π΅Π³ΠΊΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠ½ΠΈΠΌΠ°Ρ‚ΡŒ.
  • Β ΠšΠ°Ρ‡Π΅ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΠΈ надёТная конструкция.
  • Β Π‘Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€ сдСлан ΠΈΠ· Π½Π΅Ρ€ΠΆΠ°Π²Π΅ΡŽΡ‰Π΅ΠΉ стали.
  • Β Π’ устройствС Π½Π΅Ρ‚ Π·Π°ΠΌΠΎΡ‡Π½ΠΎΠΉ скваТины.
  •  Устройство ΠΎΠ±ΡˆΠΈΡ‚ΠΎ ΠΈΡ‚Π°Π»ΡŒΡΠ½ΡΠΊΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΆΠ΅ΠΉ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.
  •  НСстандартный ΠΊΠ»ΡŽΡ‡.
  •  Гарантия 5 Π»Π΅Ρ‚.

Π’ Β«ΠŸΠΈΡ‚ΠΎΠ½Π΅Β» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° концСпция Π’Π˜Π”Π˜ΠœΠžΠ™ ΠœΠ•Π₯ΠΠΠ˜Π§Π•Π‘ΠšΠžΠ™ Π—ΠΠ©Π˜Π’Π«. Β«ΠŸΠΈΡ‚ΠΎΠ½Β» Π²ΠΈΠ΄Π΅Π½ Ρ‡Π΅Ρ€Π΅Π· Π»ΠΎΠ±ΠΎΠ²ΠΎΠ΅ ΠΈ Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ стСкла. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ саму ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ проникновСния Π² Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ. Β«ΠŸΠΈΡ‚ΠΎΠ½Β» — это мощная мСханичСская Π·Π°Ρ‰ΠΈΡ‚Π°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ многочислСнных китайских Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ руля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π³ΠΎΠ»Ρ‹ΠΌΠΈ Ρ€ΡƒΠΊΠ°ΠΌΠΈ.

Видя, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ мСханичСским Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ руля, ΡƒΠ³ΠΎΠ½Ρ‰ΠΈΠΊΡƒ ΠΏΡ€ΠΎΡ‰Π΅ Π½Π°ΠΉΡ‚ΠΈ для ΡƒΠ³ΠΎΠ½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ.


Β«ΠŸΠΈΡ‚ΠΎΠ½Β» — просто ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ:

  • НС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° Π½Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ.
  • НС Π²ΠΌΠ΅ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ автомобиля.
  • Π›Π΅Π³ΠΊΠΎ устанавливаСтся ΠΈ снимаСтся.
  • УстанавливаСтся Π½Π° 99% всСх Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ.
  • НС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ обслуТивания ΠΈ смазки

  • ВСхничСскиС характСристики:

    • Масса, Π³ :2380
    • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» нСсущСго стСрТня :Π‘Ρ‚. 45, Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΆΠ° Autoleather
    • ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€Π° :20Π₯13 (Π½Π΅Ρ€ΠΆΠ°Π²Π΅ΡŽΡ‰Π°Ρ ΡΡ‚Π°Π»ΡŒ
    • Рабочая Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ срСды, Β°Π‘ :-50….+50
    • Π“Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, ΠΌΠΌ: 565 Ρ… 110

    ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°Ρ†ΠΈΡ:

    • НСсущий ΡΡ‚Π΅Ρ€ΠΆΠ΅Π½ΡŒ
    • ΠšΠ»ΡŽΡ‡ – 2 ΡˆΡ‚.
    • Π‘Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€
    • Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ
    • Π“Π°Ρ€Π°Π½Ρ‚ΠΈΠΉΠ½Ρ‹ΠΉ Ρ‚Π°Π»ΠΎΠ½

    Гарантия 5 Π»Π΅Ρ‚.


    Как Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Python-прилоТСния ΠΎΡ‚ внСдрСния врСдоносных скриптов

    Python-прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ мноТСство скриптов. Π­Ρ‚ΠΈΠΌ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π°ΠΌ «свинью» β€” Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ ΠΌΡ‹ мСньшС всСго ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π΅Ρ‘ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ.

    Одним ΠΈΠ· достоинств Python считаСтся простота использования: Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ скрипт, Π½ΡƒΠΆΠ½ΠΎ просто ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² .py-Ρ„Π°ΠΉΠ»Π΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ python с этим Ρ„Π°ΠΉΠ»ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, python my_file.py). Π’Π°ΠΊ ΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ наш Ρ„Π°ΠΉΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ my_app.py ΠΈ my_lib.py ΠΈ Π΄Π°Π»Π΅Π΅ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ import...from: import my_lib from my_app.py.

    Однако Ρƒ этой простоты ΠΈ лёгкости Π΅ΡΡ‚ΡŒ ΠΈ обратная сторона: Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ Π²Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ, Ρ‚Π΅ΠΌ большС Ρƒ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ° возмоТностСй для Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°.

    Python-ΠΊΠΎΠ΄ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² бСзопасных мСстах


    МодСль бСзопасности Python основана Π½Π° Ρ‚Ρ€Ρ‘Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ…:
    1. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ каТдая запись Π² sys. path Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Π°Π΄Ρ‘ΠΆΠ½ΡƒΡŽ Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ бСзопасно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.
    2. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится Π³Π»Π°Π²Π½Ρ‹ΠΉ скрипт (main), всСгда ΡƒΠΊΠ°Π·Π°Π½ Π² sys.path.
    3. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ python Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ рассматриваСтся ΠΊΠ°ΠΊ локация Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ скрипта, Π΄Π°ΠΆΠ΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ -c ΠΈΠ»ΠΈ -m.

    ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΒ» установлСно Π½Π° Π²Π°ΡˆΡƒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Π’ этом случаС СдинствСнная локация (ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ°ΠΏΠΊΠΈ с установлСнным Python), которая Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² ваш sys.path ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, β€” это ΠΏΠ°ΠΏΠΊΠ° с Π³Π»Π°Π²Π½Ρ‹ΠΌ скриптом ΠΈΠ»ΠΈ исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ.

    НапримСр, Ссли pip находится Π² /usr/bin, ΠΈ Π²Ρ‹ запускаСтС /usr/bin/pip, Ρ‚ΠΎ Π² sys.path Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ /usr/bin. Π—Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² /usr/bin ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ root, поэтому эта локация считаСтся бСзопасной.

    Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, соглашСния ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π½Π°ΠΌ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: /path/to/python -m pip. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с $PATH

    ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠΉ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ для Windows.

    Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, всё ΠΈ Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ вас ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ полномочия Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² дирСкториях, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Python Π±Π΅Ρ€Ρ‘Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.

    Папка Downloads β€” уязвимая локация


    БущСствуСт мноТСство способов Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ (Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС) ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ Downloads (Β«Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠΈΒ») Π±Π΅Π· Π²Π΅Π΄ΠΎΠΌΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π­Ρ‚Ρƒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Ρ‚Π°ΠΊΠ° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ «ПодмСна DLLΒ». Π’ нашСм случаС Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΎ скриптах Python, Π½ΠΎ идСя Ρ‚Π° ΠΆΠ΅ самая.

    Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ стали Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ этому ΠΈ постСпСнно ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ посСщённыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ сайты Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Ρ‚Π°ΠΉΠ½ΠΎ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π΅Π³ΠΎ ΠΏΠ°ΠΏΠΊΡƒ Downloads.

    Однако эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всё Π΅Ρ‰Ρ‘ доступСн ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Content-Disposition HTTP header’s filename*, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт сайтам Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для размСщСния Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

    Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Ρ‚Π°ΠΊΠ°


    Π’Ρ‹ запускаСтС установку: python -m pip. Π’Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ Python с Π²ΠΏΠΎΠ»Π½Π΅ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ довСрия Π²Π΅Π±-сайта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΡ€Π°Π²Π΄Π°, ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π° Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· PyPI. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, это какая-Ρ‚ΠΎ внутрСнняя вСрсия, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, это ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· β€” Π±Π΅Π· Ρ€Π°Π·Π½ΠΈΡ†Ρ‹. Π˜Ρ‚Π°ΠΊ ΠΊ Π²Π°ΠΌ отправляСтся totally-legit-package.whl
    :
    ~$ cd Downloads
    ~/Downloads$ python -m pip install ./totally-legit-package.whl

    Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ, Π½ΠΎ, оказываСтся, Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ Π½Π°Π·Π°Π΄ Π½Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ сайтС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ посСтили, ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ XSS JavaScript Π±Π΅Π· вашСго Π²Π΅Π΄ΠΎΠΌΠ° Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» pip.py с врСдоносными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π² Π²Π°ΡˆΡƒ ΠΏΠ°ΠΏΠΊΡƒ Downloads.

    Π‘ΡƒΠΌ!

    Авария!

    ~$ mkdir attacker_dir
    ~$ cd attacker_dir
    ~/attacker_dir$ echo 'print("lol ur pwnt")' > pip.py
    ~/attacker_dir$ python -m pip install requests
    lol ur pwnt

    Π‘Ρ‚Ρ€Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ PYTHONPATH


    НСсколькими Π°Π±Π·Π°Ρ†Π°ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ я писал:
    СдинствСнная локация (ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ°ΠΏΠΊΠΈ с установлСнным Python), которая Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² ваш sys.
    path ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, β€” это ΠΏΠ°ΠΏΠΊΠ° с Π³Π»Π°Π²Π½Ρ‹ΠΌ скриптом ΠΈΠ»ΠΈ исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ.

    Π’Π°ΠΊ, Π° Ρ‡Ρ‚ΠΎ здСсь Π΄Π΅Π»Π°Π΅Ρ‚ словосочСтаниС Β«ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ»? КакиС Π΅Ρ‰Ρ‘ Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ?

    Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния $PYTHONPATH ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Но Π²Ρ‹ Π±Ρ‹ Π½Π΅ стали Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ свою Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ Π² $PYTHONPATH, ΠΏΡ€Π°Π²Π΄Π°?

    К соТалСнию, сущСствуСт ситуация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это случайно.
    Π”Π°Π²Π°ΠΉΡ‚Π΅ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ набросаСм «уязвимоС» Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

    # tool.py
    try:
        import optional_extra
    except ImportError:
        print("extra not found, that's fine")

    Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ 2 Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ: install_dir ΠΈ attacker_dir. ΠŸΡ€ΠΎΠ²Π°Π»ΠΈΠΌΡΡ Π² install_dir, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ cd attacker_dir ΠΈ размСстим Ρ‚Π°ΠΌ наш врСдоносный ΠΊΠΎΠ΄ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ tool.py:
    # optional_extra.py
    print("lol ur pwnt")

    ΠžΡΡ‚Π°Π½Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ:
    ~/attacker_dir$ python . ./install_dir/tool.py
    extra not found, that's fine

    Пока всё ΠΈΠ΄Ρ‘Ρ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ.

    Но сСйчас ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Ρ‘Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. МногиС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² $PYTHONPATH Π΅Ρ‰Ρ‘ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ:

    export PYTHONPATH="/new/useful/stuff:$PYTHONPATH";

    На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, это ΠΈΠΌΠ΅Π΅Ρ‚ смысл: Ссли Ρ‚Ρ‹ добавляСшь ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ X Π² $PYTHONPATH, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ Y Ρ‚ΡƒΠ΄Π° Ρ‚ΠΎΠΆΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ, Π° ΠΌΠΎΠΆΠ΅Ρ‚, ΠΈ Π½Π΅Ρ‚; Π² любом случаС Π²Π°ΠΌ Π±Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π·Π°Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒ измСнСния, связанныС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ОсобСнно это Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ людСй.

    И Π²ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ сталкиваСмся со «странным» ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ $PYTHONPATH. Если Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запуска $PYTHONPATH Π±Ρ‹Π»Π° пуста ΠΈΠ»ΠΈ Π½Π΅ установлСна, Π² Π½Π΅ΠΉ появится пустая строка, которая Π±ΡƒΠ΄Π΅Ρ‚ распознана ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ это:

    ~/attacker_dir$ export PYTHONPATH="/a/perfectly/safe/place:$PYTHONPATH";
    ~/attacker_dir$ python ../install_dir/tool.
    py lol ur pwnt

    Для ΠΏΡƒΡ‰Π΅ΠΉ бСзопасности Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм $PYTHONPATH пустой ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‰Ρ‘ Ρ€Π°Π·:
    ~/attacker_dir$ export PYTHONPATH="";
    ~/attacker_dir$ python ../install_dir/tool.py
    lol ur pwnt

    Π’ΠΎΡ‡Π½ΠΎ, это совсСм Π½Π΅ бСзопасно!

    И Π΅Ρ‰Ρ‘: оказываСтся, ситуации, ΠΊΠΎΠ³Π΄Π° пСрСмСнная $PYTHONPATH пуста ΠΈ ΠΊΠΎΠ³Π΄Π° пСрСмСнная $PYTHONPATH Π½Π΅ установлСна, β€” это Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ истории:

    os.environ.get("PYTHONPATH") == ""</code> ΠΈ <code>os.environ.get("PYTHONPATH") == None.

    Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ очистили $PYTHONPATH, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ unset:
    ~/attacker_dir$ python ../install_dir/tool.py
    extra not found, that's fine

    Π’ΠΎΠΎΠ±Ρ‰Π΅, запись Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $PYTHONPATH β€” Π±Ρ‹Π» самым распространённым способом настройки окруТСния для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΎΠ½ Π²Ρ‹ΡˆΠ΅Π» ΠΈΠ· ΠΌΠΎΠ΄Ρ‹ с появлСниСм Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ ΠΈ virtualenv. Если Ρƒ вас старая конфигурация, которая Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ Π² $PYTHONPATH, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· этого, Ρ‚ΠΎ сСйчас самоС врСмя ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Ρ‘.

    Если ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π²Ρ‹ этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»Π°ΠΉΡ„Ρ…Π°ΠΊ:

    export PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}new_entry_1"
    export PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}new_entry_2"

    Π’ bash ΠΈ zsh это даст Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:
    $ echo "${PYTHONPATH}"
    new_entry_1:new_entry_2

    Ну Π²ΠΎΡ‚, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π»ΠΈΡˆΠ½ΠΈΡ… Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠΉ ΠΈ пустых записСй.

    И Π² ΠΊΠΎΠ½Ρ†Π΅: Ссли Π²Ρ‹ всё Π΅Ρ‰Ρ‘ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с $PYTHONPATH, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ. ВсСгда!

    ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Π΅Π΅


    БущСствуСт нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² опасного развития событий, связанных с запуском Python-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ Downloads:
    • Запуск python ~/Downloads/anything.py (Π΄Π°ΠΆΠ΅ Ссли сам anything.py бСзопасСн). Π’Π°ΡˆΠ° ΠΏΠ°ΠΏΠΊΠ° Downloads Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² sys.path.
    • ПослС запуска jupyter notebook ~/Downloads/anything. ipynb ΠΏΠ°ΠΏΠΊΠ° Downloads Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² sys.path.

    ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄ запуском Ρ„Π°ΠΉΠ»Ρ‹ .py ΠΈ .ipynb Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· этой ΠΏΠ°ΠΏΠΊΠΈ.

    Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ cd Downloads ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запуск python -c с инструкциСй import Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ запуск python с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠΌ Π½Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°, Ссли ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π»Π΅ΠΆΠ°Ρ‚ Π² ΠΏΠ°ΠΏΠΊΠ΅ Downloads.

    К соТалСнию, ~/Downloads/ Π½Π΅ СдинствСнная локация, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ врСдоносныС Ρ„Π°ΠΉΠ»Ρ‹. НапримСр, Ссли Π²Ρ‹ администрируСтС сСрвСр Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΠΊΡ‚ΠΎ ΠΈ Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ cd public_uploads ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ python.

    Π’ этом случаС, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, стоит ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ², добавлял ΠΊ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌ .uploaded. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ выполнСния скриптов .py.

    ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π΅Ρ€Π΅ΠΆΠ΅Π½ΠΈΡ


    Если Ρƒ вас Π΅ΡΡ‚ΡŒ прилоТСния, написанныС Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π² ΠΏΠ°ΠΏΠΊΠ΅ Downloads, Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ скрипту (/ path / to / venv / bin / pip), Π° Π½Π΅ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ (/ path / to / venv / bin / python -m pip).

    Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, просто ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования Downloads Π² качСствС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ Π»ΡŽΠ±Ρ‹Π΅ скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄ запуском пСрСмСститС Π² Π±ΠΎΠ»Π΅Π΅ подходящСС мСсто.

    Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΎΡ‚ΠΊΡƒΠ΄Π° Python Π±Π΅Ρ€Ρ‘Ρ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ. ΠŸΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ строку Π»Π΅Π²ΠΎΠ³ΠΎ Python-скрипта Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ контроля Π½Π°Π΄ вашим ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ!

    ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ


    Читая Ρ‚Π°ΠΊΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ с «совСтами ΠΈ Π»Π°ΠΉΡ„Ρ…Π°ΠΊΠ°ΠΌΠΈΒ» ΠΏΠΎ бСзопасности ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠΌΡ‘Π½, Π·Π½Π°Π΅Ρ‚ ΠΊΡƒΡ‡Ρƒ ΠΌΠ΅Π»ΠΎΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ ΠΈ постоянно Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом. Но Π½Π° самом Π΄Π΅Π»Π΅, это Π½Π΅ совсСм Ρ‚Π°ΠΊ. Π― объясню.

    Π—Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π³ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ я с Π·Π°Π²ΠΈΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ наблюдал, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, ΠΎΡ‚ΠΊΡƒΠ΄Π° Python Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ΄. НапримСр, люди ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ свою ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ Twisted, Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ twisted.py. Но вСдь Π² этом случаС ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ просто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½!

    ΠšΠΈΠ±Π΅Ρ€ΠΏΡ€Π΅ΡΡ‚ΡƒΠΏΠ½ΠΈΠΊΠΈ Ρ€Π°Π΄ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ссли ΠΎΠ½ΠΈ смогли ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ систСмных администраторов ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Если Π²Ρ‹ Π²Π·Π»ΠΎΠΌΠ°Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ этого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Но Ссли Π²Ρ‹ Π²Π·Π»ΠΎΠΌΠ°Π΅Ρ‚Π΅ администратора ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ сдСлаСтС это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ тысячам ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‡ΡŒΠΈ систСмы находятся ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ администратора, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

    ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ «просто всё врСмя Π±ΡƒΠ΄ΡŒ остороТнСС» Π½Π΅ являСтся Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠΌ. Π’Π΅ ИВ-спСциалисты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСсут ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ с большим количСством ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ обязаны Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ остороТными. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΠ± особСнностях Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

    Π‘Π°Π³ ΠΈΠ»ΠΈ Ρ„ΠΈΡ‡Π°…


    НичСго ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я описал Π²Ρ‹ΡˆΠ΅, Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ являСтся настоящСй «ошибкой» ΠΈΠ»ΠΈ Β«ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒΡŽΒ». Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Python ΠΈΠ»ΠΈ Jupyter сдСлали Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎ ошибкС. БистСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½Π° спроСктирована, ΠΈ это, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ. Π›ΠΈΡ‡Π½ΠΎ Ρƒ мСня Π½Π΅Ρ‚ ΠΈΠ΄Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² Π½Π΅ΠΉ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π½Π΅ урСзая Ρ‚Ρƒ ΠΌΠΎΡ‰ΡŒ Python, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ‚Π°ΠΊ Π΅Π³ΠΎ Ρ†Π΅Π½ΠΈΠΌ.

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

    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описав слоТности ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со скриптами Python, я Ρ‚Π°ΠΊΠΆΠ΅ надСюсь Π½Π°Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ Π½Π° Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΏΠΎ бСзопасности. МоТно Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ SawStop для выполнСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ²? КакоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· описанных Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ?

    ΠžΡΡ‚Π°Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π² бСзопасности, Π΄Ρ€ΡƒΠ·ΡŒΡ.



    На ΠΏΡ€Π°Π²Π°Ρ… Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹

    VDSina ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ бСзопасныС сСрвСры Π½Π° Linux ΠΈΠ»ΠΈ Windows β€” Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· прСдустановлСнных ОБ, Π»ΠΈΠ±ΠΎ устанавливайтС ΠΈΠ· своСго ΠΎΠ±Ρ€Π°Π·Π°.

    ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡƒΠ³ΠΎΠ½Π½Ρ‹ΠΉ Π·Π°ΠΌΠΎΠΊ Π½Π° Ρ€ΡƒΠ»Π΅Π²ΠΎΠ΅ колСсо

    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ
    ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ: ΠœΠ΅Ρ…Π°Π½ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡƒΠ³ΠΎΠ½Π½Ρ‹Π΅ устройства

    ΠŸΠΈΡ‚ΠΎΠ½Β — мСханичСскоС ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡƒΠ³ΠΎΠ½Π½ΠΎΠ΅ устройство для автомобиля.

    • Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°ΠΌΠΎΠΊ Π½Π° Ρ€ΡƒΠ»Π΅Π²ΠΎΠΉ Π²Π°Π», ΠΈΠ· Π½Π΅Ρ€ΠΆΠ°Π²Π΅ΡŽΡ‰Π΅ΠΉ стали, Π±Π΅Π· Π·Π°ΠΌΠΎΡ‡Π½ΠΎΠΉ скваТины.
    • ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ.
    • ΠŸΡ€ΠΎΡΡ‚Π°Ρ, быстрая ΠΈ лёгкая активация, справится любой Π°Π²Ρ‚ΠΎΠ²Π»Π°Π΄Π΅Π»Π΅Ρ†.
    • МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто «бСйсбольной Π±ΠΈΡ‚Ρ‹Β» ΠΈΠ»ΠΈ Β«Ρ„ΠΎΠΌΠΊΠΈΒ», Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ°Π»ΠΎ мСста, всСгда ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ, коТаная ΠΎΠΏΠ»Ρ‘Ρ‚ΠΊΠ° ΠΏΠΎ всСму ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Ρƒ обСспСчиваСт эстСтичный Π²ΠΈΠ΄ ΠΈ Ρ‡Π΅Ρ‚ΠΊΠΈΠΉ, ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Ρ…Π²Π°Ρ‚.
    • Гарантия Π·Π°Π²ΠΎΠ΄Π° изготовитСля 5 Π»Π΅Ρ‚.
    • ΠœΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ бСсплатная доставка ΠΈΠ»ΠΈ самовывоз (Π² дСнь обращСния ΠΈΠ»ΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ дСнь) ΠΏΠΎ МосквС ΠΈ бСсплатная доставка Π² любом Π³ΠΎΡ€ΠΎΠ΄Π΅ Π Π€, ΠΏΡ€ΠΈ Π·Π°ΠΊΠ°Π·Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€Π° ΠŸΠΈΡ‚ΠΎΠ½ сСйчас.

    ВСст Π½Π° Π²Π·Π»ΠΎΠΌ

    Π›ΡƒΡ‡ΡˆΠ΅Π΅Β Π²Ρ€Π΅ΠΌΡ ΠΏΠΎΒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ тСста ΠΆΡƒΡ€Π½Π°Π»Π° Β«Π—Π°Β Ρ€ΡƒΠ»Ρ‘ΠΌΒ»!

    Π’ экспСримСнтС ΠΏΠΎ Π²ΡΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ΠΆΡƒΡ€Π½Π°Π» «Π—Π°Π ΡƒΠ»Ρ‘ΠΌ» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΏΠΎΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сотрудникам слуТб экстрСнной тСхничСской ΠΏΠΎΠΌΠΎΡ‰ΠΈ, Π±Π»Π°Π³ΠΎ Π²ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°ΠΌΠΊΠΈ им приходится довольно часто ΠΈΒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΒ β€” за дСньги, ΠΏΠΎΒ Π·Π°ΠΊΠ°Π·Ρƒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°. Рискнули нС всС: ΡˆΠ°Π½ΡΡ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ впросак Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ†Π΅Π½ΠΈΠ»ΠΈ достаточно высоко. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всС основания ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π΅Ρ… спСциалистов, ΠΊΡ‚ΠΎ согласился, Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ ΠΈΠ·Β Π»ΡƒΡ‡ΡˆΠΈΡ…!


    Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡-ΠΊΠΎΠ»ΡŒΡ†ΠΎ

    • НСт Π·Π°ΠΌΠΎΡ‡Π½ΠΎΠΉ скваТины!
    • 100% Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ «Π±Π°ΠΌΠΏΠΈΠ½Π³Π°» (вскрытия Π°Π²Ρ‚ΠΎ ΠΎΡ‚ΠΌΡ‹Ρ‡ΠΊΠΎΠΉ)!
    • ΠŸΠΎΠ²Ρ‚ΠΎΡ€ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½.


    ΠšΠΎΠΆΠ°Π½Ρ‹Π΅ Ρ‡Π΅Ρ…Π»Ρ‹ для Π·Π°ΠΌΠΊΠ° ΠΈ ΠΊΠ»ΡŽΡ‡Π°

    • Для ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎΠ³ΠΎ использования Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€Π°, особСнно Π² Π·ΠΈΠΌΠ½ΠΈΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΆΠ°Π½ΡƒΡŽ ΠΎΠΏΠ»Π΅Ρ‚ΠΊΡƒ.
    • Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠΆΠ°Π½ΠΎΠΉ ΠΎΠΏΠ»Ρ‘Ρ‚ΠΊΠΈ для Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€Π° — 250Ρ€.
    • Π—Π°ΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΆΠ°Π½ΡƒΡŽ ΠΎΠΏΠ»Ρ‘Ρ‚ΠΊΡƒ
    • Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠžΠΏΠ»Π΅Ρ‚ΠΊΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠΎΡ€ΠΎΠ½ΠΎΠΉ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно с Ρ‡Π΅Ρ…Π»ΠΎΠΌ.


    Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΌ

    Π ΡƒΠ»Π΅Π²Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Β«ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Β» ΠΈ Β«ΠŸΠΈΡ‚ΠΎΠ½Β» подходят для Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ, это Π±ΠΎΠ»Π΅Π΅ 300 ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ!


    ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» изготовлСния

    ΠΠ΅Ρ€ΠΆΠ°Π²Π΅ΡŽΡ‰Π°Ρ ΡΡ‚Π°Π»ΡŒ 20Π₯13, которая примСняСтся для изготовлСния Ρ‚ΡƒΡ€Π±ΠΈΠ½Π½Ρ‹Ρ… Π»ΠΎΠΏΠ°Ρ‚ΠΎΠΊ, Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ с Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сроком слуТбы, мСдицинских инструмСнтов.



    ΠŸΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅. ΠžΡΡ‚Π°Π²ΡŒΡ‚Π΅ свой Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, спСциалист Π·Π°Π²ΠΎΠ΄Π° изготовитСля ΠΏΠ΅Ρ€Π΅Π·Π²ΠΎΠ½ΠΈΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ (Π² Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ врСмя с 9 Π΄ΠΎ 19 часов ΠΏΠΎ московскому Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ) ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚Π΅ сами 8-903-287-89-98


    Доставка Ρ‚ΠΎΠ²Π°Ρ€Π°

    • Доставка Ρ‚ΠΎΠ²Π°Ρ€Π° ΠΏΠΎ МосквС ΠΈ МО, осущСствляСтся послС оформлСния Π·Π°ΠΊΠ°Π·Π° Π½Π° сайтС производитСля;
    • ΠžΠΏΠ»Π°Ρ‚Π° осущСствляСтся ΠΊΡƒΡ€ΡŒΠ΅Ρ€Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π½Π°Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ/Π±Π΅Π·Π½Π°Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ on-line;
    • Доставка Ρ‚ΠΎΠ²Π°Ρ€Π° Π² Ρ€Π΅Π³ΠΈΠΎΠ½Ρ‹, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ ΠœΠΎΡΠΊΠ²Ρ‹ ΠΈ МО, осущСствляСтся послС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΊΠ°Π·Π° Π½Π° сайтС производитСля;
    • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° сайтС производитСля ΠΈ послС с ΠΊΡƒΡ€ΡŒΠ΅Ρ€ΠΎΠΌ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚ΡŒ врСмя ΠΈ мСсто ΠΎΡ‚Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π’Π°ΡˆΠ΅ΠΌ Π³ΠΎΡ€ΠΎΠ΄Π΅.
    • Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€ Π’Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΡƒΡ€ΡŒΠ΅Ρ€, Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ, согласуйтС это с Π½ΠΈΠΌ ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ. Π£Π΄ΠΎΠ±Π½ΠΎ ΠΈ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎ врСмя нанСсСниС ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π›Π˜Π’Π­ΠšΠ‘ ΠΈ установку Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ΠΎΡ€Π°.
    • Гарантия Π·Π°Π²ΠΎΠ΄Π° изготовитСля 5 Π»Π΅Ρ‚.

    Β 



    Π—Π°Ρ‰ΠΈΡ‚Π° Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

    БущСствуСт Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:

    ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Python прилоТСния, комбинируя Sentinel Envelope с Sentinel Data File Protection (DFP). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, защищаСтся нСпосрСдствСнно ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ указываСтся, с ΠΊΠ°ΠΊΠΈΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ (Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ), ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ автоматичСски Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ. ΠΠ΅Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½Π΅Π΅. Π‘Π°ΠΌΠΈ *.py ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΡˆΠΈΡ„Ρ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта Sentinel Data File Protection (DFP).

    Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап компиляции сниТаСт ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции ΠΊΠΎΠ΄Π° ΠΈ позволяСт Sentinel Envelope Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС Π² настройкС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ β€œΠΏΡ€ΠΎΡΠ»ΠΎΠΉΠΊΠΈβ€ Π² Π²ΠΈΠ΄Π΅ Cython ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ C-компилятор.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Оба ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ стартовый скрипт прилоТСния, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Python. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ рСкомСндуСтся ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° вашСго прилоТСния Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Python ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стартовый скрипт для Π²Ρ‹Π·ΠΎΠ²Π° модуля.
    Π—Π°Ρ‰ΠΈΡ‚Π° прилоТСния Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Sentinel Data File Protection состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… этапов:

    ● Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° *.pyc.

    ● Π—Π°ΡˆΠΈΡ„Ρ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ *.pyc с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Sentinel dfcrypt.

    ● Π—Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π² настройках Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΠΏΡ†ΠΈΡŽ β€œEnable data file protection (Data Protection Utility) = Version 2” для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° с Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ ΠΏΡƒΡ‚Π΅ΠΌ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Envelope ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° вмСстС с Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ *. pyc Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с использованиСм pyinstaller).

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’Π°ΠΆΠ½ΠΎ всСгда Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ скомпилированный Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Python (*.pyc), Π° Π½Π΅ простой исходный ΠΊΠΎΠ΄ Python (.py). ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python сначала ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ *.py Π² Ρ„Π°ΠΉΠ»Ρ‹ *.pyc, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° диск, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ прСдоставлСнии Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° *.py вмСсто Ρ„Π°ΠΉΠ»Π° *.pyc ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python сгСнСрируСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСкстовый Ρ„Π°ΠΉΠ» *.pyc ΠΈ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π΅Π³ΠΎ Π½Π° диск, Π³Π΄Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ доступСн для Π°Π½Π°Π»ΠΈΠ·Π° Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹

    Для Windows

    ПослС установки Sentinel LDK ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρƒ Python прилоТСния для Windows с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Sentinel Data File Protection, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

    C:\Users\<username>\Documents\Gemalto\Sentinel LDK version\Samples\Envelope\Python \data_file_protection

    ΠŸΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΡ‹Π΅ скрипты Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π·Π°Ρ‰ΠΈΡ‚Ρƒ простого Python прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

    C:\Users\<username>\Documents\Gemalto\Sentinel LDK version\Samples\Envelope\Python \sample_appΒ 

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прСдставляСт собой простоС Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит ΠΈΠ· сцСнария запуска (main. py) ΠΈ 3’х ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (moduleA.py, moduleB.py, moduleC.py). Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» написан Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π² ΠΎΠ±Π΅ΠΈΡ… вСрсиях Python2 ΠΈ Python3. ДирСктория data_file_protection содСрТит:

    ● build_dfp_protected_python2_app.bat

    Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для Python2 для Windows, с использованиСм: ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° DEMOMA, Sentinel Envelope, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… для Sentinel LDK (dfcrypt) ΠΈ pyinstaller.

    ● envelope_python2.prjx

    Π€Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Sentinel Envelope, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Envelope для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python2 (python27.dll) для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ сцСнария.

    ● build_dfp_protected_python3_app.bat
    Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для Python3 для Windows, с использованиСм: ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° DEMOMA, Sentinel Envelope, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… для Sentinel LDK (dfcrypt) ΠΈ pyinstaller

    . ● envelope_python3.prjx
    Π€Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Sentinel Envelope, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Envelope для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python3 (python37.dll) для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ сцСнария.

    Для Linux

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρƒ Python прилоТСния для Linux с использованиСм Sentinel Data File Protection, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

    <DVD_Root>/Linux/Samples/Envelope/Python/data_file_protection

    ΠŸΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΡ‹Π΅ скрипты Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π·Π°Ρ‰ΠΈΡ‚Ρƒ простого Python прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

    <DVD_Root>/Linux/Samples/Envelope/Python/sample_app

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прСдставляСт собой простоС Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит ΠΈΠ· сцСнария запуска (main.py) ΠΈ 3’х ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (moduleA.py, moduleB.py, moduleC.py). Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» написан Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π² ΠΎΠ±Π΅ΠΈΡ… вСрсиях Python2 ΠΈ Python3.ДирСктория data_file_protection содСрТит:

    ● build_dfp_protected_python2_app. sh
    Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для Python2 для Linux с использованиСм: ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° DEMOMA, Sentinel Linux Envelope, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… для Sentinel LDK (dfcrypt) ΠΈ pyinstaller.

    ● build_dfp_protected_python3_app.sh
    Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для Python3 для Linux с использованиСм: ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° DEMOMA, Sentinel Linux Envelope, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… для Sentinel LDK (dfcrypt) ΠΈ pyinstaller.

    ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°Ρ‰ΠΈΡ‚Ρ‹

    Π¨Π°Π³ΠΈ для создания Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния с использованиСм Sentinel Data File Protection ΠΈ Sentinel Envelope:

    Π‘Π±ΠΎΡ€ΠΊΠ° прилоТСния ΠΈ зависимостСй Π² *.py ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

    ЗапуститС pyinstaller с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ: «-d noarchive» для Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π°Ρ‰ΠΈΡ‚Ρ‹*.py модуля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    pyinstaller -d noarchive main.py

    Π­Ρ‚ΠΎΡ‚ шаг собираСт зависимости вашСго прилоТСния ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Python. Β«-d noarchiveΒ» инструктируСт pyinstaller Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ скомпилированныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Python ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Ρ‡Ρ‚ΠΎ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ шага ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ.Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого шага являСтся автономная ΠΏΠ°ΠΏΠΊΠ° (dist/<application_name>), содСрТащая вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ всС Π΅Π³ΠΎ зависимости.ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если установлСнный pyinstaller Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ «-d noarchive», ΠΎΠ½ слишком стар ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β 

    pip:pip install pyinstaller —upgrade

    Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ *.py ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ dfcrypt для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° вашСго прилоТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    dfcrypt —encrypt —encver:2 «—key:A secret» —vcf:DEMOMA.hvc —fid:0 dist/<application_name>/moduleA.pyc encrypted/moduleA.pyc

    dfcrypt —encrypt —encver:2 «—key:a secret» —vcf:DEMOMA.hvc —fid:0 dist/<application_name>/moduleB.pyc encrypted/moduleB.pyc

    Π₯отя это ΠΈ Π½Π΅ являСтся строго ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Β«—key:Β» для указания ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ для всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ прилоТСния. Π­Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, которая ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ врСмя запуска прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ большоС количСство Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. НС указывая «—key:», ΠΊΠΎΠΌΠ°Π½Π΄Π° dfcrypt Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ случайный ΠΊΠ»ΡŽΡ‡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.Когда Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ с ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΡ… Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    copy encrypted/moduleA.pyc dist/<application_name>/

    copy encrypted/moduleB.pyc dist/<application_name>/

    Π—Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python

    Π—Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Envelope Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python (*.dll / *.so) с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ возмоТности чтСния Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…:

    НапримСр Π² Linux ΠΈ Python2:

    linuxenv —vcf:DEMOMA.hvc —fid:0 —dfp dist/<app_name>/libpython2.7.so.1.0 dist/<app_name>/libpython2.7.so.1.0

    ΠšΠ»ΡŽΡ‡ Β«—dfpΒ» Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Data File Protection, Ρ‡Ρ‚ΠΎ позволяСт Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Python.

    Π’ Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Sentinel Envelope ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ Data File Protection Version 2.

    Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Envelope Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ:Β 

    dist/<application_name>

    Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, просто скопируйтС ΠΏΠ°ΠΏΠΊΡƒ dist/<application_name> Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€.Π’Π°ΡˆΠ΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²ΠΈΠ΄Π°:Β 

    dist/<application_name>/<application_name>.
    Π—Π°Ρ‰ΠΈΡ‚Π° прилоТСния Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Cython ΠΈ Sentinel Envelope состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… этапов:
    1. ΠŸΠ΅Ρ€Π΅Π²Π΅Π΄ΠΈΡ‚Π΅ ваши ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Python (*.py) Π² C-Code, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Cython.
    2. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ C-Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python (*.pyd / *.so), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ C-компилятор для вашСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹1.
    3. Π—Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python (*.pyd / *.so) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Sentinel Envelope.
    Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ, прСдоставляя Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python вмСстС со стартовым скриптом вашСго прилоТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: pyinstaller).

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹

    Для Windows

    ПослС установки Sentinel LDK ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρƒ прилоТСния Python для Windows с использованиСм Cython ΠΈ Sentinel Envelope, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

    C:\Users\<username>\Documents\Gemalto\Sentinel LDK version\Samples\Envelope\Python \cythonize_and_envelope

    Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚Ρƒ простого прилоТСния Python, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

    C:\Users\<username>\Documents\Gemalto\Sentinel LDK version\Samples\Envelope\Python \sample_app

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния прСдставляСт собой простоС Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит ΠΈΠ· сцСнария запуска (main.py) ΠΈ 3’х ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (moduleA.py, moduleB.py, moduleC.py). Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» написан Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π² ΠΎΠ±Π΅ΠΈΡ… вСрсиях Python2 ΠΈ Python3.

    ДирСктория cythonize_and_envelope содСрТит:

    ● build_python2.bat Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для Python2 ΠΏΠΎΠ΄ Windows, с использованиСм: ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° DEMOMA, Cython, компилятора Microsoft Visual C ++ для Python 2. 7, Sentinel Envelope ΠΈ pyinstaller.

    ● envelope_cythonized_py2modules.prjx
    Π€Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Sentinel Envelope, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Envelope для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Python (moduleA.pyd, moduleB.pyd), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ созданы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ сцСнария.

    ● build_python3.bat Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для Python3 ΠΏΠΎΠ΄ Windows, с использованиСм: ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° DEMOMA, Cython, Microsoft Build Tools для Visual Studio 2019, Sentinel Envelope ΠΈ pyinstaller.

    ● envelope_cythonized_py3modules.prjx
    Π€Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Sentinel Envelope, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Envelope для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Python (moduleA.pyd, moduleB.pyd), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ созданы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ сцСнария.

    Для Linux

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ прилоТСния Python для Linux с использованиСм Cython ΠΈ Sentinel Envelope ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

    <DVD_Root>/Linux/Samples/Envelope/Python/cythonize_and_envelope

    ΠŸΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΡ‹Π΅ скрипты Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π·Π°Ρ‰ΠΈΡ‚Ρƒ простого прилоТСния Python, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

    <DVD_Root>/Linux/Samples/Envelope/Python/sample_app

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прСдставляСт собой простоС Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит ΠΈΠ· сцСнария запуска (main. py) ΠΈ 3’х ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (moduleA.py, moduleB.py, moduleC.py). Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» написан Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π² ΠΎΠ±Π΅ΠΈΡ… вСрсиях Python2 ΠΈ Python3.

    ДирСктория cythonize_and_envelope содСрТит:

    ● build_python2.sh
    Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Python2 ΠΏΠΎΠ΄ Linux с использованиСм: ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° DEMOMA, Cython, GCC, Sentinel Envelope ΠΈ pyinstaller.

    ● build_python3.sh
    Π­Ρ‚ΠΎΡ‚ сцСнарий Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Python3 ΠΏΠΎΠ΄ Linux с использованиСм: ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° DEMOMA, Cython, GCC, Sentinel Envelope ΠΈ pyinstaller.

    ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°Ρ‰ΠΈΡ‚Ρ‹

    Π¨Π°Π³ΠΈ для создания Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния с использованиСм Cython ΠΈ Sentinel Envelope:

    Врансляция *.py ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² C-Code с использованиСм Cython

    Для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ вашСго модуля Python с *.py Π½Π° *.pyx, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это позволяСт Cython Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Sentinel Envelope. Cython ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн с использованиСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β 

    pip:pip install cython —upgrade

    ЗапуститС cython ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ ΠΎΠ½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ Python 2 ΠΈΠ»ΠΈ Python 3:

    cython -2 —no-docstrings .\moduleA.pyxΒ 

    ΠΈΠ»ΠΈ

    cython -3 —no-docstrings .\moduleA.pyx

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ являСтся прСдставлСниС модуля Python Π² Π²ΠΈΠ΄Π΅ C-ΠΊΠΎΠ΄Π° ( moduleA.c).

    Π‘Π±ΠΎΡ€ΠΊΠ° C-Π€Π°ΠΉΠ»ΠΎΠ² Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (исполняСмый Ρ„Π°ΠΉΠ»)

    Для Windows:УстановитС Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ компилятор:

    ● Python2: Microsoft Visual C++ Compiler для Python 2.7 https://www.microsoft.com/en-us/download/details.aspx?id=44266

    ● Python3: Microsoft Build Tools для Visual Studio 2019 https://visualstudio.microsoft.com/ru/downloads/

    ЗапуститС консоль (cmd-shell) ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

    ● Python2: C:\Users\<username>\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9. 0\vcvarsall.bat» amd64

    ● Python3: C:\<vs_build_tools_install_dir>\VC\Auxiliary\Build\vcvarsall.bat» amd64

    Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² консоли, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ C-ΠΊΠΎΠ΄:

    ● Python2: cl /nologo /c /MD /Ox /W3 /I C:\Python27\include moduleA.c link /nologo /dll -out:moduleA.pyd C:\Python27\libs\python27.lib moduleA.obj

    ● Python3: cl /nologo /c /MD /Ox /W3 /IC:\Python37\include moduleA.c link /nologo /dll -out:moduleA.pyd C:\Python37\libs\python37.lib moduleA.obj

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python для Windows (moduleA.pyd).Для Linux:

    УстановитС GCC-Compiler с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² вашСго дистрибутива Linux, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² консоли:

    apt install gcc

    УстановитС ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² вашСго дистрибутива Linux, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    apt install python2-dev

    ΠΈΠ»ΠΈ

    apt install python3-dev

    Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ C-ΠΊΠΎΠ΄:

    ● Python2: gcc -fPIC -pthread -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2. 7 -c moduleA.c gcc -pthread -shared moduleA.o -o moduleA.so

    ● Python3: gcc -fPIC -pthread -fwrapv -O2 -Wall -fno-strict-aliasing -I «/usr/include/python3.7» -c moduleA.c gcc -pthread -shared moduleA.o -o moduleA.so

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python для Linux (moduleA.so).

    Π—Π°Ρ‰ΠΈΡ‚Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Python прилоТСния (исполняСмого Ρ„Π°ΠΉΠ»Π°) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Envelope

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ для Linux:

    linuxenv —vcf:DEMOMA.hvc —fid:0 plain/moduleA.so prot/moduleA.so

    Для Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Sentinel Envelope Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ dll/exe Ρ„Π°ΠΉΠ»Π°.

    Как Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Python-ΠΊΠΎΠ΄ ΠΎΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ?

    МногиС Π·Π°Π΄Π°ΡŽΡ‚ΡΡ вопросом — ΠΊΠ°ΠΊ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ написанных Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ скриптов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ эти скрипты. Π’ своё врСмя ΠΈ ΠΌΡ‹ задались этим вопросом, Π² слСдствии Ρ‡Π΅Π³ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ нашли Π΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

    МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ просто ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт python ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС скрипта. НапримСр, запустили test.py, рядом появился test.pyc, Π΅Π³ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΄Π°Π΅ΠΌ. Однако Π² сСти Π΅ΡΡ‚ΡŒ скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ· Π½Π΅Π³ΠΎ исходный ΠΊΠΎΠ΄ с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ Π±Π°ΠΉΡ‚Π°.

    ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ сорцы скрипта — Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Для этого, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ cython Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти Π² Π‘ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ инструмСнтами, Π²Ρ€ΠΎΠ΄Π΅ make.

    Рассмотрим Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ пошагово:

    — ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ python-скрипт Π² Π‘ΠΈ:
    cython -3 БКРИПВ.py

    ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ БКРИПВ.c — это исходный ΠΊΠΎΠ΄ python-модуля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Ρ‚ΠΎ ΠΆΠ΅ самоС Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΈΡ‚ΠΎΠ½-скрипт.

    — ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π‘ΠΈ-Ρ„Π°ΠΉΠ»:

    gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include/python3.3m -c БКРИПВ.c -o БКРИПВ.o
    ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» БКРИПВ.ΠΎ

    ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠ»ΠΈΠ½ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° линуксС, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ . so:

    На Windows Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ .pyd

    link = gcc -pthread -shared БКРИПВ.o -o БКРИПВ.so
    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для ΠΏΠΈΡ‚ΠΎΠ½Π° «Π‘КРИПВ.so», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ… скриптов:
    import БКРИПВ
    ....

    Π­Ρ‚ΠΈΠΌ способом ΠΌΡ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ всС наши скрипты для ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтСй, Ρ€Π°Π±ΠΎΡ‚Ρ‹ с FTP ΠΈ ΠΈΠΌΠ΅ΠΉΠ»Π°ΠΌΠΈ, входящиС Π² состав ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Fream. ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° сайтС http://www.freedomscripts.org

    На нашСм сСрвСрС стоит скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π½ΠΎΡ‡ΡŒ пСрСсобираСт всС наши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Linux, Windows ΠΈ Freebsd, благодаря Ρ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π² git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ свСТиС Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ вСрсии ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ….

    ΠŸΡ€ΠΎΠ΄Π°ΠΆΠ° скомпилированных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ привязку ΠΊ ΠΆΠ΅Π»Π΅Π·Ρƒ — скрипты связаны с ΠΎΠ±Ρ‰ΠΈΠΌ сСрвСром Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ Π΅ΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡ… Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚, провСряя Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΊΡƒΠΏΠ»Π΅Π½Π½ΠΎΠΉ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ. ΠœΡ‹ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ сСкрСта ΠΈΠ· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π½Π°ΠΌΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. ΠŸΠΈΡˆΠΈΡ‚Π΅ Π½Π°ΠΌ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌ Π½Π° сайтС ΠΈ ΠΌΡ‹ с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠΌ Π½Π° ваши вопросы ΠΎΠ± устройствС Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

    Π—Π°Ρ‰ΠΈΡ‚Π° ΠŸΠ°Ρ€ΠΎΠ»Π΅ΠΌ Python | Π‘Π»ΠΎΠ³ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

    Edit: ваш пСрСсмотрСнный вопрос ясно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ обСспокоСны Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ люди Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ пароля. Π”Π°, это Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄ .Ρ„ΠΎΡ€ΠΌΠ° pyc, Π½ΠΎ это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π΅. К соТалСнию, Python просто Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для прСдотвращСния измСнСния ΠΊΠΎΠ΄Π°. Π›ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ сСрвСром, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ измСняСт ΠΊΠΎΠ΄, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ этот шаг. Π’ зависимости ΠΎΡ‚ вашСго Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ примСнСния, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ излишним.


    ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° управлСния Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ-это слоТная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° бСзопасности, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ люди тратят всю свою ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²ΠΎΡ‚ нСкоторая информация ΠΎΠ± этом, которая ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ пароля с нуля:

    Π”Π°ΠΆΠ΅ для случайной Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π΅ хранятся Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ тСкста. ВмСсто этого, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ односторонняя Ρ…ΡΡˆ-функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ пароля примСняСтся Ρ‚Π° ΠΆΠ΅ Ρ…ΡΡˆ-функция ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹. Если ΠΎΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Ρ‚ΠΎ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, довольно высока.

    Π’ΠΎ, Ρ‡Ρ‚ΠΎ составляСт «Π½Π°Π΄Π΅ΠΆΠ½ΡƒΡŽ» Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, слоТно. НСкоторыС ΠΈΠ· Π½ΠΈΡ… ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· распространСнных Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ извСстным эксплойтам.

    Noelkd прСдоставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСмонстрируСт этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, хотя MD5, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΊΠΎΠ΄, являСтся (Π― полагаю) ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ скомпромСтированы Π΄ΠΎ Ρ‚Π°ΠΊΠΎΠΉ стСпСни, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅:

    АутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π² Python

    Если вас бСспокоит сохранСниС фактичСского пароля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… SQLite Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, это другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ я Π²ΠΈΠ΄Π΅Π» Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ, хранящиСся Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСкст Π² скриптах ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ структурировано Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компромСтация этого пароля являСтся вопросом ΡƒΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ риска.

    Advanced Hunting with Python API Guide — Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Windows

    • 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

    Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

    Π’Π°ΠΆΠ½ΠΎ

    Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Microsoft Defender for Endpoint , Π½ΠΎΠ²ΠΎΠ΅ имя для Microsoft Defender Advanced Threat Protection . ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… обновлСниях Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ здСсь.Π’ блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΌΡ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ названия ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

    ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ:

    Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ слоТныС запросы с использованиСм Python, см. Advanced Hunting API.

    Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ дСлимся ΠΎΠ±Ρ€Π°Π·Ρ†Π°ΠΌΠΈ Python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для выполнСния запроса.

    ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС : Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½

    • Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:
     
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ json
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ urllib.запрос
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ urllib.parse
    
    tenantId = '00000000-0000-0000-0000-000000000000' # Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сюда свой собствСнный ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
    appId = '11111111-1111-1111-1111-111111111111' # Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сюда свой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прилоТСния
    appSecret = '22222222-2222-2222-2222-222222222222' # Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сюда свой сСкрСт прилоТСния
    
    url = "https://login.windows.net/%s/oauth3/token"% (tenantId)
    
    resourceAppIdUri = 'https://api.securitycenter.windows.com'
    
    body = {
        'рСсурс': resourceAppIdUri,
        'client_id': appId,
        'client_secret': appSecret,
        'grant_type': 'client_credentials'
    }
    
    Π΄Π°Π½Π½Ρ‹Π΅ = urllib.parse.urlencode (Ρ‚Π΅Π»ΠΎ) .encode ("utf-8")
    
    req = urllib.request.Request (URL, Π΄Π°Π½Π½Ρ‹Π΅)
    response = urllib.request.urlopen (req)
    jsonResponse = json.loads (response.read ())
    aadToken = jsonResponse ["Ρ‚ΠΎΠΊΠ΅Π½_доступа"]
    
      

    Π³Π΄Π΅

    • tenantId: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ запрос Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°)
    • appId: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ вашСго прилоТСния Azure AD (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… запросов для Π—Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΠ° Microsoft для ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ)
    • appSecret: Π‘Π΅ΠΊΡ€Π΅Ρ‚ вашСго прилоТСния Azure AD

    Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос

    Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос:

      query = 'RegistryEvents | limit 10 '# Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сюда свой запрос
    
    url = "https: // api.securitycenter.windows.com/api/advancedqueries/run "
    Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ = {
    'Content-Type': 'application / json',
    'ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ': 'application / json',
    «Авторизация»: «На ΠΏΡ€Π΅Π΄ΡŠΡΠ²ΠΈΡ‚Π΅Π»ΡΒ» + aadToken
    }
    
    data = json.dumps ({'Запрос': запрос}). encode ("utf-8")
    
    req = urllib.request.Request (URL, Π΄Π°Π½Π½Ρ‹Π΅, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ)
    response = urllib.request.urlopen (req)
    jsonResponse = json.loads (response.read ())
    schema = jsonResponse ["Π‘Ρ…Π΅ΠΌΠ°"]
    results = jsonResponse ["Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹"]
    
      
    Π‘Ρ…Π΅ΠΌΠ°
    • содСрТит схСму Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² вашСго запроса
    • Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² содСрТат Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вашСго запроса

    Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ запросы

    Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ слоТныС запросы (ΠΈΠ»ΠΈ многострочныС запросы), сохранитС запрос Π² Ρ„Π°ΠΉΠ» ΠΈ вмСсто ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

      queryFile = open ("D: \\ Temp \\ myQuery.txt ", 'r') # Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ
    query = queryFile.read ()
    queryFile.close ()
      

    Π Π°Π±ΠΎΡ‚Π° с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ запроса

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ запроса.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

      для Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ…:
    print (result) # Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ вСсь Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
    print (result ["EventTime"]) # Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свойство EventTime ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°
    
    
      

    Для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² запроса Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ CSV Π² Ρ„Π°ΠΉΠ» file1.csv Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

      ΠΈΠΌΠΏΠΎΡ€Ρ‚ CSV
    
    outputFile = open ("D: \\ Temp \\ file1.csv ", 'ш')
    output = csv.writer (Ρ„Π°ΠΉΠ» Π²Ρ‹Π²ΠΎΠ΄Π°)
    output.writerow (results [0] .keys ())
    для Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ…:
    output.writerow (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.значСния ())
    
    outputFile.close ()
      

    Для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² запроса Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON Π² Ρ„Π°ΠΉΠ» file1.json Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

      outputFile = open ("D: \\ Temp \\ file1.json", 'w')
    json.dump (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Ρ„Π°ΠΉΠ» Π²Ρ‹Π²ΠΎΠ΄Π°)
    outputFile.close ()
      

    ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΊΠΎΠ΄Π° Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Cython

    Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° пСрСнСсСна ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ Π±Π»ΠΎΠ³Π° https: // blog.easyaspy.org/post/16/2019-05-15-compiling-python-code-with-cython

    Если Π²Ρ‹ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя занимались Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ с использованиСм Python, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎ Cython ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ускоряСт Ρ€Π°Π±ΠΎΡ‚Ρƒ. Cython — это ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ статичСский компилятор для языка программирования Python ΠΈ языка программирования Cython, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся надмноТСством Python. Cython ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ваш ΠΊΠΎΠ΄ Python Π² C, Π° Π·Π°Ρ‚Π΅ΠΌ создаСт / ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компилятора C ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ Π²Ρ‹Π±ΠΎΡ€Ρƒ. Π’ ΠΌΠΈΡ€Π΅ Python это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ называСтся Cythonizing .ΠŸΡ€ΠΈΡ€ΠΎΡΡ‚ скорости Π²Π΅Π»ΠΈΠΊ, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ваш ΠΊΠΎΠ΄ Python.

    Как Ρ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Python?

    ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступный компилятор C Π² зависимости ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ, ΠΈ вСрсии Python, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅. Если ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΠ΄ Linux, Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Linux-ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² поставляСтся с установлСнным компилятором GCC. Если Π² Windows Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Π½Π°Π±ΠΎΡ€ компиляторов для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… вСрсий Python, доступных здСсь.

    Π’ этом руководствС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python 3.7 Π² Windows 10. Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈ быстрый ΠΏΡƒΡ‚ΡŒ для нас — Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Visual Studio Community 2019. Π’ΠΎ врСмя установки Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ПК с C ++ , Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Π²ΠΎΡ‚ ΠΈ всС! Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ инструмСнты ΠΈ SDK для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° C ΠΈ C ++.

    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом являСтся установка Cython с использованиСм pip .

      pip install cython  

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ нашим ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Python.Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» Python с ΠΈΠΌΠ΅Π½Π΅ΠΌ module.py , содСрТащий Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ hello () , ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΅Π³ΠΎ Cythonize.

      #! / Usr / bin / env python
    
    
    def ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ():
        print ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!")
      

    ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг ΠΊ Cythonizing — Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ стандартный setuptools setup.py , содСрТащий ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ext_modules . ΠœΡ‹ просто ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ имя Ρ„Π°ΠΉΠ»Π° нашСго модуля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ cythonize () . Π’ setuptools наш cythonized ΠΌΠΎΠ΄ΡƒΠ»ΡŒ называСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ.

      #! / Usr / bin / env python
    ΠΈΠ· настройки ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° setuptools
    ΠΈΠ· Cython.Build import cythonize
    
    Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ(
        ext_modules = cythonize ('ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.py')
    )
      

    ПослСдний шаг — ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ нашС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² setup.py . АргумСнт --inplace строит нашС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС, Ρ‡Ρ‚ΠΎ ΠΈ module.py .

      python setup.py build_ext --inplace  

    Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ сборки содСрТит всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ компилятором C.Для нас Π²Π°ΠΆΠ΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ .c , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся эквивалСнтом C нашСго ΠΊΠΎΠ΄Π° Python, ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ .cp37-win_amd64.pyd , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся нашим скомпилированным Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ.

      сборка /
    module.c
    module.cp37-win_amd64.pyd
    module.py
    setup.py  

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наш скомпилированный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΌΡ‹ просто ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Python.

      #! / Usr / bin / env python
    ΠΈΠ· модуля ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Ρ‚
    
    Ссли __name__ == '__main__':
        ЗдравствуйтС()
      

    Π’Ρ‹Π²ΠΎΠ΄:

      $ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ python.Ρ€Ρƒ
    ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€!  

    Как Cythonize большиС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Python?

    Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ использовали Π² Π½Π°ΡˆΠΈΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π±Π»ΠΎΠ³Π°Ρ…. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ руководств Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ просто ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш ΠΊΠΎΠ΄:

      #! / Usr / bin / env python
    ΠΈΠ· настройки ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° setuptools
    ΠΈΠ· Cython.Build import cythonize
    
    Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ(
        ext_modules = cythonize ('амортизация / *. py')
    )  

    ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ __init__.py Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирован, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π•ΡΡ‚ΡŒ нСсколько Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π½ΠΎ я Π½Π΅ Π±ΡƒΠ΄Ρƒ Π΅Π³ΠΎ здСсь ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ.

      Π‘Π‘Π«Π›ΠšΠ: ошибка LNK2001: Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ внСшний символ PyInit___init__
    build \ temp.win-amd64-3.7 \ Release \ amortization \ __ init __. cp37-win_amd64.lib: Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Π°Ρ ошибка LNK1120: 1 Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ внСшниС элСмСнты
    ошибка: ΠΊΠΎΠΌΠ°Π½Π΄Π° 'C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Community \ VC \ Tools \ MSVC \ 14.20.27508 \ bin \ HostX86 \ x64 \ link .exe 'Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ ошибкой со статусом Π²Ρ‹Ρ…ΠΎΠ΄Π° 1120  

    Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ наш ΠΊΠΎΠ΄ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ ΠΈΠ· __init__.py . Нам Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ» пустым Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΈ Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

      #! / Usr / bin / env python
    ΠΈΠ· настройки ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° setuptools, Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅
    
    ΠΈΠ· Cython.Build import cythonize
    
    ext_modules = cythonize ([
        Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ("amortization.amount", ["amortization / amount.py"]),
        Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ("amortization.schedule", ["amortization / schedule.py"]),
        Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ("amortization.amortize", ["amortization / amortize.py"]),
    ])
    
    Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ(
        ext_modules = ext_modules
    )
      

    ПослС запуска установки python.py build_ext --inplace, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹.

      __init__.py
    amortize.c
    amortize.cp37-win_amd64.pyd
    amortize.py
    amount.c
    amount.cp37-win_amd64.pyd
    amount.py
    schedule.c
    schedule.cp37-win_amd64.pyd
    schedule.py  

    Π― Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠ±Ρ€Π°Π» Ρ„Π°ΠΉΠ»Ρ‹ .py , ΠΊΡ€ΠΎΠΌΠ΅ __init__.py , ΠΈ запустил pytest -v , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, хотя Π² этом Π½Π΅Ρ‚ нСобходимости, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Python ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ скомпилированныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ (.Ρ‚Π°ΠΊ Π² Unix ΠΈ .pyd Π² Windows), Ссли ΠΎΠ½ΠΈ доступны.

      tests / test_amortization.py :: test_amortization_amount ΠŸΠ ΠžΠ™Π”Π•ΠΠž [50%]
    tests / test_amortization.py :: test_amortization_schedule ΠŸΠ ΠžΠ™Π”Π•ΠΠž [100%]
    
    ========================== 2 ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π·Π° 0,05 сСкунды =================== ========  

    Как Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Cython Π½Π° PyPI?

    ΠŸΡ€ΠΎΡΡ‚ΠΎ запустив python setup.py bdist_wheel , Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ колСсо, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ вСрсиями Python ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΈ Ρƒ вас.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π°ΠΌ слСдуСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ wheel. Π•ΡΡ‚ΡŒ Π΄Π²Π° способа ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ вСрсий:

    1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ колСса Π½Π° всСх Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈ вСрсиях ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² PyPI
    2. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ исходный ΠΊΠΎΠ΄ Π² PyPI ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ

    ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ усилий, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСссы Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π΅ CI / CD. Π‘Π°ΠΌΡ‹ΠΉ быстрый ΠΏΡƒΡ‚ΡŒ — это Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ внСсти Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² настройку .py .

      #! / Usr / bin / env python
    ΠΈΠ· настройки ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° setuptools, Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅
    
    ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
        ΠΈΠ· Cython.Build import cythonize
    
        ext_modules = cythonize ([
            Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ("amortization.amount", ["amortization / amount.py"]),
            Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ("amortization.schedule", ["amortization / schedule.py"]),
            Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ("amortization.amortize", ["amortization / amortize.py"]),
        ])
    ΠΊΡ€ΠΎΠΌΠ΅ ImportError:
        ext_modules = НСт
    
    Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ(
        ext_modules = ext_modules
    )
      

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с исходным ΠΊΠΎΠ΄ΠΎΠΌ, сначала ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Cython ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ всС Ρ„Π°ΠΉΠ»Ρ‹ *.c ΠΈ * .pyd Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ запуститС python setup.py sdist . ЕдинствСнным нСдостатком этого Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ cython ΠΈ компилятор C. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ это, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

      # сначала установитС компилятор C
    pip install cython
    pip install amortization -v # Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ -v, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π·Π° кулисами
      

    Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

    Cython ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ модуля Python ΠΏΡƒΡ‚Π΅ΠΌ компиляции ΠΊΠΎΠ΄Π° Python Π² C.Π₯отя это ΠΎΠ±Ρ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования Cython Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для обфускации ΠΊΠΎΠ΄Π°. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ наш ΠΊΠΎΠ΄ ΠΎΡ‚ Ρ‡ΡƒΠΆΠΈΡ… Π³Π»Π°Π·, ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Cython ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Π±Π΅Π· исходного ΠΊΠΎΠ΄Π°.

    Руководство ΠΏΠΎ интроспСкции Python

    Как ΡˆΠΏΠΈΠΎΠ½ΠΈΡ‚ΡŒ Π·Π° вашими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Python

    ΠŸΠ°Ρ‚Ρ€ΠΈΠΊ Πžβ€™Π‘Ρ€Π°ΠΉΠ΅Π½
    ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ 1 дСкабря 2002 Π³.

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интроспСкция?

    Π’ повсСднСвной ΠΆΠΈΠ·Π½ΠΈ самоанализ — это Π°ΠΊΡ‚ самоанализа.Π‘Π°ΠΌΠΎΠ°Π½Π°Π»ΠΈΠ· — это исслСдованиС собствСнных мыслСй, чувств, ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΉ ΠΈ дСйствий. Π’Π΅Π»ΠΈΠΊΠΈΠΉ философ Π‘ΠΎΠΊΡ€Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Π» Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ своСй ΠΆΠΈΠ·Π½ΠΈ Π² самоанализС, побуТдая своих ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΠ΅Π²-афинян ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅. Он Π΄Π°ΠΆΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π», Ρ‡Ρ‚ΠΎ для Π½Π΅Π³ΠΎ «нСизучСнная Тизнь Π½Π΅ стоит Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΆΠΈΡ‚ΡŒΒ». (Бсылки Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ Π‘ΠΎΠΊΡ€Π°Ρ‚Π΅ см. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ РСсурсы.)

    Π’ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄ интроспСкциСй понимаСтся ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π·Π½Π°Π΅Ρ‚ ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ способно.Π‘Π°ΠΌΠΎΠ°Π½Π°Π»ΠΈΠ· Π΄Π°Π΅Ρ‚ программистам Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с языком программирования, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΈΠ½Ρ‚Ρ€ΠΎΡΠΏΠ΅ΠΊΡ†ΠΈΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ «нСисслСдованный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ стоит ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры».

    Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ прСдставлСны возмоТности самоанализа языка программирования Python. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° самоанализа Π² Python ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСна ΠΏΠΎ всСму языку. ЀактичСски, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Python Π±Π΅Π· Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ самоанализа. К ΠΊΠΎΠ½Ρ†Ρƒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сСбя ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ, копаясь Π² сСрдцах ΠΈ Π΄ΡƒΡˆΠ°Ρ… Π²Π°ΡˆΠΈΡ… собствСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Python.

    ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ нашС исслСдованиС интроспСкции Python Π² самом ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. НСкоторыС ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°ΠΆΠ΅ Π²ΠΎΠ·Ρ€Π°Π·ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ особСнности, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ, Π½Π΅ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ «интроспСктивными». ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ вопрос ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡŽΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ сфСру самоанализа ΠΈΠ»ΠΈ Π½Π΅Ρ‚, остаСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ наша СдинствСнная Π·Π°Π΄Π°Ρ‡Π° — Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° интСрСсныС вопросы.

    Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ нашС расслСдованиС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Python Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.Когда ΠΌΡ‹ запускаСм Python ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΌΡ‹ Π²Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Python, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ввСсти ΠΊΠΎΠ΄ Python ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python. (ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, пСрСчислСнныС Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ с использованиСм Python 2.2.2. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ»ΠΈ ошибки ΠΏΡ€ΠΈ использовании Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΉ вСрсии. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ с Π²Π΅Π±-сайта Python [см. Π Π°Π·Π΄Π΅Π» РСсурсы].)

    Листинг 1. Запуск ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅
     $ python
    Python 2.2.2 (# 1, 28 октября 2002 Π³., 17:22:19)
    [GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)] Π² linux2
    Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Β«ΠΏΠΎΠΌΠΎΡ‰ΡŒΒ», «авторскиС ΠΏΡ€Π°Π²Π°Β», Β«ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρ‹Β» ΠΈΠ»ΠΈ «лицСнзия».
    >>> 

    Когда Π²Ρ‹ запуститС Python ΠΈ посмотритС Π½Π° ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ Python ( >>> ), Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсно, ΠΊΠ°ΠΊΠΈΠ΅ слова Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒΡΡ Python. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков программирования Π΅ΡΡ‚ΡŒ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ слова ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° этом языкС, ΠΈ Python Π½Π΅ являСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Python ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π½Π°Π±Ρ€Π°Ρ‚ΡŒ help , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Python ΠΏΠΎΠΌΠΎΡ‡ΡŒ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами.

    Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΎΠ½Π»Π°ΠΉΠ½-справки Python

    Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с Π½Π°Π±ΠΎΡ€Π° help , ΠΊΠ°ΠΊ прСдлагаСтся, ΠΈ посмотрим, Π΄Π°Π΅Ρ‚ Π»ΠΈ ΠΎΠ½ Π½Π°ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ подсказки ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… словах:

    Листинг 2. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊ Python
     >>> help
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ help () для получСния ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ справки ΠΈΠ»ΠΈ help (object) для получСния справки ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. 

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ help () Π±Π΅Π· указания ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

    Листинг 3.Запуск справочной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹
     >>> help ()
    
    Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Python 2.2! Π­Ρ‚ΠΎ интСрактивная справочная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°.
    
    Если Π²Ρ‹ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Python, Π²Π°ΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ стоит ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ
    ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΏΠΎ адрСсу http://www.python.org/doc/tut/.
    
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ любого модуля, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΈΠ»ΠΈ Ρ‚Π΅ΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΠΎ написанию
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Python ΠΈ использованиС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Python. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· этой справочной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ
    Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, просто Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Β«Π²Ρ‹ΠΉΡ‚ΠΈΒ».
    
    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список доступных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΈΠ»ΠΈ Ρ‚Π΅ΠΌ, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Β«ΠΌΠΎΠ΄ΡƒΠ»ΠΈΒ»,
    "ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова" ΠΈΠ»ΠΈ "Ρ‚Π΅ΠΌΡ‹".ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит однострочноС Ρ€Π΅Π·ΡŽΠΌΠ΅.
    Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚; Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ€Π΅Π·ΡŽΠΌΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТат Π΄Π°Π½Π½ΠΎΠ΅ слово
    Ρ‚ΠΈΠΏΠ° «спам», Ρ‚ΠΈΠΏΠ° Β«ΠΌΠΎΠ΄ΡƒΠ»ΠΈ спама».
    
    ΠΏΠΎΠΌΠΎΡ‰ΡŒ> 

    ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, ΠΌΡ‹ сСйчас приблиТаСмся. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Π² подсказкС справки:

    Листинг 4. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словам
     help> keywords
    
    Π’ΠΎΡ‚ список ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Python. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ любоС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ.
    
    ΠΈ elif global ΠΈΠ»ΠΈ
    ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅, Ссли ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½
    ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π² ΠΊΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ
    класс exec Π² ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ
    ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ
    def для лямбда-тСста
    дСль ΠΈΠ· Π½Π΅ Π² Ρ‚ΠΎ врСмя
    
    ΠΏΠΎΠΌΠΎΡ‰ΡŒ> Π²Ρ‹ΠΉΡ‚ΠΈ
    
    Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ‚Π΅ справку ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python.Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ прямо ΠΈΠ·
    ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Β«help (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)Β». Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Β«help ('строка')Β»
    ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт, Ρ‡Ρ‚ΠΎ ΠΈ Π²Π²ΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ строки Π² подсказкС help>.
    >>> 

    Когда ΠΌΡ‹ Π½Π°Π±Ρ€Π°Π»ΠΈ help () , ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ сообщСниС ΠΈ нСсколько инструкций, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ послСдовала подсказка. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ список ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Python. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° наш вопрос, ΠΌΡ‹ Π²Ρ‹ΡˆΠ»ΠΈ ΠΈΠ· ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ справки, ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΡ‰Π°Π»ΡŒΠ½ΠΎΠ΅ сообщСниС ΠΈ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Python.

    Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, интСрактивная справочная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Python ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ мноТСству Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° справки вСсьма ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ возмоТности самоанализа Python. Но простоС использованиС справки Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ справка ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ†Π΅Π»ΡŒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ — Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ всС сСкрСты самоанализа Python, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ быстро Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° Ρ€Π°ΠΌΠΊΠΈ справочной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹.

    ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ справку, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Сю, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список доступных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.ΠœΠΎΠ΄ΡƒΠ»ΠΈ — это просто тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹, содСрТащиС ΠΊΠΎΠ΄ Python, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° .py . Если ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ help ('modules') Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Python ΠΈΠ»ΠΈ Π²Π²Π΅Π΄Π΅ΠΌ modules Π² подсказкС справки, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ список доступных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ частичному списку, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π½ΠΈΠΆΠ΅. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ сами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ доступны Π² вашСй систСмС, ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ считаСтся, Ρ‡Ρ‚ΠΎ Python поставляСтся с Β«Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ батарСями».

    Листинг 5. Частичный список доступных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ
     >>> help ('modules')
    
    ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, ΠΏΠΎΠΊΠ° я собСру список всСх доступных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ...
    
    BaseHTTPServer cgitb marshal sndhdr
    ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ сокСт Bastion Chunk
    CDROM cmath md5 sre
    CGIHTTPServer cmd mhlib sre_compile
    Canvas code mimetools sre_constants
    <...>
    bisect macpath signal xreadlines
    cPickle macurl2path сайт xxsubtype
    ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик cStringIO slgc (ΠΏΠ°ΠΊΠ΅Ρ‚) zip-Ρ„Π°ΠΉΠ»
    ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ mailcap smtpd
    cgi markupbase smtplib
    
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ любоС имя модуля, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ.Или Π²Π²Π΅Π΄ΠΈΡ‚Π΅ "ΠΌΠΎΠ΄ΡƒΠ»ΠΈ спама" для поиска
    для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π² описании ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ слово «спам».
    
    >>> 

    БистСмный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

    Одним ΠΈΠ· ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ самом Python, являСтся ΠΌΠΎΠ΄ΡƒΠ»ΡŒ sys . Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, импортируя ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° Π΅Π³ΠΎ содСрТимоС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ классы) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ записи Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ (.). ΠœΠΎΠ΄ΡƒΠ»ΡŒ sys содСрТит мноТСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ интСрСсныС подробности ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Python.Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΡ‹ собираСмся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Python. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлаСм, это ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ sys . Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sys.executable , которая содСрТит ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python:

    Листинг 6. Π˜ΠΌΠΏΠΎΡ€Ρ‚ модуля sys
     $ python
    Python 2.2.2 (# 1, 28 октября 2002 Π³., 17:22:19)
    [GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)] Π² linux2
    Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Β«ΠΏΠΎΠΌΠΎΡ‰ΡŒΒ», «авторскиС ΠΏΡ€Π°Π²Π°Β», Β«ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρ‹Β» ΠΈΠ»ΠΈ «лицСнзия».>>> import sys
    >>> sys.executable
    '/ usr / local / bin / python' 

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

    Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ модуля sys .

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ сообщаСт Π½Π°ΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ:

    Атрибут sys.platform
     >>> sys.platform
    'linux2' 

    ВСкущая вСрсия Python доступна ΠΊΠ°ΠΊ строка, Ρ‚Π°ΠΊ ΠΈ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (ΠΊΠΎΡ€Ρ‚Π΅ΠΆ содСрТит ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²):

    Листинг 8. Атрибуты sys.version ΠΈ sys.version_info
     >>> sys.вСрсия
    '2.2.2 (# 1, 28 октября 2002 Π³., 17:22:19) \ n [GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)]'
    >>> sys.version_info
    (2, 2, 2, 'Ρ„ΠΈΠ½Π°Π»', 0) 

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ maxint ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ максимальноС доступноС цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

    Атрибут sys.maxint
     >>> sys.maxint
    2147483647 

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ argv — это список, содСрТащий Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт argv [0] — это ΠΏΡƒΡ‚ΡŒ ΠΊ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ. Когда ΠΌΡ‹ запускаСм Python Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСдставляСт собой ΠΏΡƒΡΡ‚ΡƒΡŽ строку:

    Листинг 10.Атрибут sys.argv
     >>> sys.argv
    [''] 

    Когда ΠΌΡ‹ запускаСм Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Python, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ PyCrust (ссылку Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ PyCrust см. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ РСсурсы), ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

    Листинг 11. Атрибут sys.argv с использованиСм PyCrust
     >>> sys.argv [0]
    '/home/pobrien/Code/PyCrust/PyCrustApp.py' 

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ path — это ΠΏΡƒΡ‚ΡŒ поиска ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, список ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Python Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π²ΠΎ врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.ΠŸΡƒΡΡ‚Π°Ρ строка '' Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ относится ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ:

    Листинг 12. Атрибут sys.path
     >>> sys.path
    ['', '/ home / pobrien / Code',
    '/usr/local/lib/python2.2',
    '/usr/local/lib/python2.2/plat-linux2',
    '/usr/local/lib/python2.2/lib-tk',
    '/usr/local/lib/python2.2/lib-dynload',
    '/usr/local/lib/python2.2/site-packages'] 

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ modules — это ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сопоставляСт ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для всСх Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Python ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ:

    Листинг 13. Атрибут sys.modules
     >>> sys.modules
    {'stat': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'stat' ΠΈΠ· '/usr/local/lib/python2.2/stat.pyc'>,
    '__future__': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ '__future__' ΠΈΠ· '/usr/local/lib/python2.2 / __ future __. pyc'>,
    'copy_reg': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'copy_reg' ΠΈΠ· '/usr/local/lib/python2.2/copy_reg.pyc'>,
    'posixpath': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'posixpath' ΠΈΠ· '/usr/local/lib/python2.2/posixpath.pyc'>,
    UserDict: <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ UserDict ΠΈΠ· / usr / local / lib / python2.2 / UserDict.pyc '>,
    'signal': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'signal' (встроСнный)>,
    'site': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'site' ΠΈΠ· '/usr/local/lib/python2.2/site.pyc'>,
    '__builtin__': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ '__builtin__' (встроСнный)>,
    'sys': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'sys' (встроСнный)>,
    'posix': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'posix' (встроСнный)>,
    'types': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'types' ΠΈΠ· '/usr/local/lib/python2.2/types.pyc'>,
    '__main__': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ '__main__' (встроСнный)>,
    'ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ' (встроСнный)>,
    'os': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'os' ΠΈΠ· '/ usr / local / lib / python2.2 / os.pyc '>,
    'os.path': <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'posixpath' ΠΈΠ· '/usr/local/lib/python2.2/posixpath.pyc'>} 

    ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов

    ВСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ вопросу ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… словах Python. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ справка ΠΏΠΎΠΊΠ°Π·Π°Π»Π° Π½Π°ΠΌ список ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, оказываСтся, Ρ‡Ρ‚ΠΎ нСкоторая информация справки ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π°. Бписок ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ТСстко Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ интроспСктивно. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, смоТСм Π»ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ нСпосрСдствСнно ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python. Если ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ help ('modules keywords') Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Python, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

    Листинг 14.ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎ модулям с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами
     >>> help ('modules keywords')
    
    Π’ΠΎΡ‚ список подходящих ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ любоС имя модуля, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ.
    
    keyword - ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова (ΠΈΠ· "graminit.c") 

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

    Листинг 15. Бписок ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов модуля keyword
     >>> import keyword
    >>> keyword.kwlist
    ['ΠΈ', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else',
    'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',
    'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'yield'] 

    Ѐункция dir ()

    Π₯отя Π½Π°ΠΉΡ‚ΠΈ ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ, Π½Π΅ Ρ‚Π°ΠΊ просто Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ содСрТит ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.И Π½Π΅ всСгда Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ исходный ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ это. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Python прСдоставляСт способ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dir () .

    Ѐункция dir () , вСроятно, являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстным ΠΈΠ· всСх ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² интроспСкции Python. Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ отсортированный список ΠΈΠΌΠ΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² для любого ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, dir () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ dir () ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ keyword ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚:

    Листинг 16.Атрибуты модуля ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова
     >>> dir (ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово)
    ['__all__', '__builtins__', '__doc__', '__file__', '__name__',
    iskeyword, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, kwdict, kwlist, main] 

    А ΠΊΠ°ΠΊ насчСт модуля sys , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ рассматривали Ρ€Π°Π½Π΅Π΅?

    Листинг 17. Атрибуты модуля sys
     >>> dir (sys)
    ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__',
    '__stdin__', '__stdout__', '_getframe', 'argv', 'builtin_module_names',
    'byteorder', 'copyright', 'displayhook', 'exc_info', 'exc_type', 'excepthook',
    'exec_prefix', 'исполняСмый Ρ„Π°ΠΉΠ»', 'Π²Ρ‹Ρ…ΠΎΠ΄', 'getdefaultencoding', 'getdlopenflags',
    'getrecursionlimit', 'getrefcount', 'hexversion', 'last_traceback',
    'last_type', 'last_value', 'maxint', 'maxunicode', 'ΠΌΠΎΠ΄ΡƒΠ»ΠΈ', 'ΠΏΡƒΡ‚ΡŒ',
    'ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°', 'прСфикс', 'ps1', 'ps2', 'setcheckinterval', 'setdlopenflags',
    'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout',
    'вСрсия', 'вСрсия_ΠΈΠ½Ρ„ΠΎ', 'warnoptions'] 

    Π‘Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² dir () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ keyword ΠΈ sys ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² спискС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΈΡ… Ρ€Π°Π½Π΅Π΅. ΠŸΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ модуля имя модуля добавляСтся ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области:

    Листинг 18. ИмСна Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области
     >>> dir ()
    ['__builtins__', '__doc__', '__name__', 'keyword', 'sys'] 

    ΠœΡ‹ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ функция dir () Π±Ρ‹Π»Π° встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Python распознаСт встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий.И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ это имя __builtins__ , Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ dir () . Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, здСсь Π΅ΡΡ‚ΡŒ связь. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²Π²Π΅Π΄Π΅ΠΌ имя __builtins__ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Python ΠΈ посмотрим, сообщаСт Π»ΠΈ Python Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрСсноС ΠΎΠ± этом:

    Листинг 19. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ __builtins__?
     >>> __builtins__
    <ΠΌΠΎΠ΄ΡƒΠ»ΡŒ '__builtin__' (встроСнный)> 

    Π˜Ρ‚Π°ΠΊ, __builtins__ выглядит ΠΊΠ°ΠΊ имя Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости, привязанноС ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ модуля с ΠΈΠΌΠ΅Π½Π΅ΠΌ __builtin__ .(ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ простыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌΠΈ значСниями, вмСсто этого Python ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках.) ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» __builtin__.py Π½Π° дискС, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ с пустыми Ρ€ΡƒΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ модуля создаСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Python ΠΈΠ· Π²ΠΎΠ·Π΄ΡƒΡ…Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ содСрТит элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всСгда доступны ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ. И хотя физичСского Ρ„Π°ΠΉΠ»Π° для просмотра Π½Π΅Ρ‚, ΠΌΡ‹ всС ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dir () ΠΊ этому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ошибок ΠΈ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ содСрТит:

    Листинг 20.Атрибуты модуля __builtins__
     >>> dir (__ builtins__)
    ['ArithmeticError', 'AssertionError', 'AttributeError', 'DeprecationWarning',
    'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False',
    'FloatingPointError', 'IOError', 'ImportError', 'IndentationError',
    'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError',
    'NameError', 'None', 'NotImplemented', 'NotImplementedError', 'OSError',
    'OverflowError', 'OverflowWarning', 'ReferenceError', 'RuntimeError',
    'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError',
    Β«SyntaxWarningΒ», Β«SystemErrorΒ», Β«SystemExitΒ», Β«TabErrorΒ», Β«TrueΒ», Β«TypeErrorΒ»,
    'UnboundLocalError', 'UnicodeError', 'UserWarning', 'ValueError', 'ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅',
    'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__', '__name__',
    'abs', 'apply', 'bool', 'buffer', 'callable', 'chr', 'classmethod', 'cmp',
    'coerce', 'compile', 'слоТный', 'copyright', 'credits', 'delattr', 'dict',
    'dir', 'divmod', 'eval', 'execfile', 'exit', 'file', 'filter', 'float',
    getattr, globals, hasattr, hash, help, hex, id, input, int,
    'intern', 'isinstance', 'issubclass', 'iter', 'len', 'лицСнзия', 'список',
    'locals', 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow',
    'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'Ρ€Π°ΡƒΠ½Π΄',
    setattr, slice, staticmethod, str, super, tuple, type, unichr,
    unicode, vars, xrange, zip] 

    Ѐункция dir () Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ строки, Ρ†Π΅Π»Ρ‹Π΅ числа, списки, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, словари, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы, экзСмпляры классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ классов.Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ dir () ΠΊ строковому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Python. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π΄Π°ΠΆΠ΅ простая строка Python ΠΈΠΌΠ΅Π΅Ρ‚ ряд Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²:

    Листинг 21. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹
     >>> dir ('this is a string')
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__',
    '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__',
    '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mul__', '__ne__',
    '__new__', '__reduce__', '__repr__', '__rmul__', '__setattr__', '__str__',
    'capize', 'center', 'count', 'decode', 'encode', 'кончаСтся с', 'expandtabs',
    'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace',
    'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind',
    'rindex', 'rjust', 'rstrip', 'split', 'splitlines', 'startwith', 'strip',
    'swapcase', 'title', 'translate', 'upper', 'zfill'] 

    ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ сами ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ символ # ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ коммСнтария. ВсС ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° коммСнтария Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки Python ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚:

    Листинг 22. ИспользованиС dir () Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…
     dir (42) # Π¦Π΅Π»ΠΎΠ΅ число (ΠΈ смысл ΠΆΠΈΠ·Π½ΠΈ)
    dir ([]) # Lis 

    Π Π΅ΠΆΠΈΠΌ Python для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

    Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ Python.

    Processing - это язык программирования, срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½-сообщСство. Π‘ 2001 Π³. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° способствовала Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ грамотности Π² ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ искусствС ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ грамотности Π² сфСрС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.БСгодня дСсятки тысяч студСнтов, Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠΎΠ², Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ², исслСдоватСлСй ΠΈ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° для обучСния, создания ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΈ производства.

    Processing ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° с синтаксисом Π½Π° основС Java ΠΈ лСксиконом графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ². ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡Π΅Ρ€ΠΏΠ°Π» Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈΠ· OpenGL, Postscript, Design by Numbers ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… источников. Π‘ постСпСнным Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… интСрфСйсов программирования, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ JavaScript, Python ΠΈ Ruby - становится всС Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° - это Π½Π΅ ΠΎΠ΄ΠΈΠ½ язык, Π° скорСС, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° искусство ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ, ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈΡŽ ΠΈ созданию Π²Π΅Ρ‰Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ΄Π°.

    ΠœΡ‹ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π΄Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступным этот общСдоступный выпуск Python Mode for Processing ΠΈ Π΅Π³ΠΎ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ докумСнтация. Π•Ρ‰Π΅ большС Π² ΠΏΡƒΡ‚ΠΈ! Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π½Π°ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ рСализация Ρ€Π΅ΠΆΠΈΠΌΠ° Python ΠΈ Π΅Π³ΠΎ докумСнтация, поТалуйста, Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ нас Π½Π° Github!

    ΠšΡ€Π΅Π΄ΠΈΡ‚Ρ‹

    Python Mode for Processing Π±Ρ‹Π» Π² основном Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π”ΠΆΠΎΠ½Π°Ρ‚Π°Π½ΠΎΠΌ Π€Π΅ΠΉΠ½Π±Π΅Ρ€Π³ΠΎΠΌ, ΠΏΡ€ΠΈ участии ДТСймса Жиля ΠΈ Π‘Π΅Π½Π° Алкова. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, справочныС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈ ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ пособия Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Python Π±Ρ‹Π»ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΈ / ΠΈΠ»ΠΈ создано ДТСймсом Π–ΠΈΠ»Π»Π΅ΠΌ, Эллисон ΠŸΡΡ€Ρ€ΠΈΡˆ ΠΈ Майлзом ΠŸΠ΅ΠΉΡ‚ΠΎΠ½ΠΎΠΌ.КСйси Риас, Π‘Π΅Π½ Π€Ρ€Π°ΠΉ, ДэниСл Π¨ΠΈΡ„Ρ„ΠΌΠ°Π½, Π° Π“ΠΎΠ»Π°Π½ Π›Π΅Π²ΠΈΠ½ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΠ» ΠΈ ободрял.

    ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Processing.py поступила ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… источников. Π”ΠΆΠΎΠ½Π°Ρ‚Π°Π½ Π€Π°ΠΉΠ½Π±Π΅Ρ€Π³ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Processing.py нСзависимо с июля 2010 Π³ΠΎΠ΄Π° ΠΏΠΎ Π°ΠΏΡ€Π΅Π»ΡŒ 2014 Π³ΠΎΠ΄Π°; с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Google любСзно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ усилия. Π›Π΅Ρ‚ΠΎΠΌ 2014 Π³ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΎΠΌ, ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ Π£Ρ‡Π΅Π±Π½Ρ‹Π΅ пособия частично Ρ„ΠΈΠ½Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ, искусством ΠΈ тСхнологиями. (IDeATe) Π² УнивСрситСтС ΠšΠ°Ρ€Π½Π΅Π³ΠΈ-МСллона, ΠΈ Π³Ρ€Π°Π½Ρ‚ΠΎΠΌ ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΠ½Π΄Π° искусств. ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Frank-Ratchye STUDIO для ВворчСский запрос Π² CMU.ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Foundation ΠΈ Fathom Ρ‚Π°ΠΊΠΆΠ΅ прСдоставили критичСскиС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½ΠΎ-тСхничСскоС обСспСчСниС этой Ρ€Π°Π±ΠΎΡ‚Ρ‹.

    Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ Π΄ΠΎΡΡ‚ΠΈΠΆΠ΅Π½ΠΈΡŽ совмСстимости с Processing 3.x Π±Ρ‹Π»Π° Π±Ρ‹Π»ΠΎ сдСлано Π›ΡƒΠΊΠ° Дамаско (Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ Google Summer of Code), ΠΏΠΎΠ΄ руководством Π“ΠΎΠ»Π°Π½Π° Π›Π΅Π²ΠΈΠ½Π°, ΠΏΡ€ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ со стороны Бтудия Π€Ρ€Π°Π½ΠΊ-Π Π°Ρ‚Ρ‡ΠΈ для творчСских поисков Π² УнивСрситСтС ΠšΠ°Ρ€Π½Π΅Π³ΠΈ-МСллона. Π‘Π΅Π· Π›ΡƒΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ ΡƒΠΌΠ΅Ρ€Π΅Ρ‚ΡŒ.

    .

    Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

    Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *