ΠΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ³ΠΎΠ½Π½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Β«ΠΠΈΡΠΎΠ½Β» 83/380 ΠΡΡΠΈΠΊΡΠ»: 39814
ΠΡΠΎΡΠΈΠ²ΠΎΡΠ³ΠΎΠ½Π½ΠΎΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Β«ΠΠΈΡΠΎΠ½Β» ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ Π»Π΅Π³ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΠΎΡ ΡΠ³ΠΎΠ½Π°. ΠΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ΅ ΡΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ³ΠΎΠ½Π° Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 2-3 ΠΌΠΈΠ½ΡΡΡ. ΠΡΠ±ΠΎΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΡΠ»Π΅Π²ΠΎΠ΅ ΠΊΠΎΠ»Π΅ΡΠΎ ΠΈ, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Π½Π° Π΄Π°Π½Π½ΡΠΉ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡ, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π² Π΄Π΅ΡΡΡΠΊΠΈ ΡΠ°Π·, ΠΏΠΎΠ½ΠΈΠΆΠ°Ρ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΡΡΡ ΡΠ³ΠΎΠ½Π° Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠ° Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°ΡΠΈΡΡ.
ΠΠΎΡΠ΅ΠΌΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ Β«ΠΠΈΡΠΎΠ½Β» Π΄Π»Ρ Π·Π°ΡΠΈΡΡ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΠΎΡ ΡΠ³ΠΎΠ½Π°:
- Β ΠΠΎΡΠ½Π°Ρ Π²ΠΈΠ΄ΠΈΠΌΠ°Ρ Π·Π°ΡΠΈΡΠ°. Π£Π³ΠΎΠ½ΡΠΈΠΊ Π²ΠΈΠ΄ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΡΡ Π·Π°ΡΠΈΡΡ ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ.
- Β ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΎ Π²ΡΠΊΡΡΡΠΈΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ.
- Β ΠΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΡΠ°ΠΆΠ° β Π±Π΅ΡΠΈ ΠΈ ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΡ!
- Β ΠΠ΅Π³ΠΊΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΈ ΡΠ½ΠΈΠΌΠ°ΡΡ.
- Β ΠΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΈ Π½Π°Π΄ΡΠΆΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ.
- Β ΠΠ»ΠΎΠΊΠΈΡΠ°ΡΠΎΡ ΡΠ΄Π΅Π»Π°Π½ ΠΈΠ· Π½Π΅ΡΠΆΠ°Π²Π΅ΡΡΠ΅ΠΉ ΡΡΠ°Π»ΠΈ.
- Β Π ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ Π½Π΅Ρ Π·Π°ΠΌΠΎΡΠ½ΠΎΠΉ ΡΠΊΠ²Π°ΠΆΠΈΠ½Ρ.
- Β Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±ΡΠΈΡΠΎ ΠΈΡΠ°Π»ΡΡΠ½ΡΠΊΠΎΠΉ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΆΠ΅ΠΉ Π²ΡΡΡΠ½ΡΡ.
- Β ΠΠ΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠ»ΡΡ.
- Β ΠΠ°ΡΠ°Π½ΡΠΈΡ 5 Π»Π΅Ρ.
Π Β«ΠΠΈΡΠΎΠ½Π΅Β» ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΠΠΠΠΠΠ ΠΠΠ₯ΠΠΠΠ§ΠΠ‘ΠΠΠ ΠΠΠ©ΠΠ’Π«. Β«ΠΠΈΡΠΎΠ½Β» Π²ΠΈΠ΄Π΅Π½ ΡΠ΅ΡΠ΅Π· Π»ΠΎΠ±ΠΎΠ²ΠΎΠ΅ ΠΈ Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΡΡΠ΅ΠΊΠ»Π°. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°ΠΌΡ ΠΏΠΎΠΏΡΡΠΊΡ ΠΏΡΠΎΠ½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π² Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ. Β«ΠΠΈΡΠΎΠ½Β» — ΡΡΠΎ ΠΌΠΎΡΠ½Π°Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°ΡΠΈΡΠ°, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΊΠΈΡΠ°ΠΉΡΠΊΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ²Π°ΡΡΡΡ Π³ΠΎΠ»ΡΠΌΠΈ ΡΡΠΊΠ°ΠΌΠΈ.
ΠΠΈΠ΄Ρ, ΡΡΠΎ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ Π·Π°ΡΠΈΡΠ΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡΠΎΠΌ ΡΡΠ»Ρ, ΡΠ³ΠΎΠ½ΡΠΈΠΊΡ ΠΏΡΠΎΡΠ΅ Π½Π°ΠΉΡΠΈ Π΄Π»Ρ ΡΠ³ΠΎΠ½Π° Π΄ΡΡΠ³ΠΎΠΉ, ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ.
youtube.com/embed/avOCknnZx1g» frameborder=»0″ allow=»accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture» allowfullscreen=»»>
Β«ΠΠΈΡΠΎΠ½Β» — ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ:
Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ:
- ΠΠ°ΡΡΠ°, Π³ :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 ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ :
- ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΡ Π² sys.
path Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π½Π°Π΄ΡΠΆΠ½ΡΡ Π»ΠΎΠΊΠ°ΡΠΈΡ, ΠΎΡΠΊΡΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
- ΠΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΡΠΊΡΠΈΠΏΡ (main), Π²ΡΠ΅Π³Π΄Π° ΡΠΊΠ°Π·Π°Π½ Π² sys.path.
- ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
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
Π ΠΎΠ±ΡΠ΅ΠΌ, Π²ΡΡ ΠΈ ΡΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π²Π°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡ , ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ 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.
ΠΏΠ°ΠΏΠΊΠ° Downloads ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ipynb
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 Ρ ΠΏΠΎΠΌΠΎΡΡΡ 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», ΠΎΠ½ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΡΠ°Ρ ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΡΒ
Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ *.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:Β» Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΊΠ»ΡΡΠ° ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
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 ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΡΠ°ΠΏΠΎΠ²:
- ΠΠ΅ΡΠ΅Π²Π΅Π΄ΠΈΡΠ΅ Π²Π°ΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Python (*.py) Π² C-Code, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Cython.
- Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ C-ΡΠ°ΠΉΠ»Ρ Π² ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Python (*.pyd / *.so), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ C-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ1.
- ΠΠ°ΡΠΈΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Python (*.pyd / *.so) Ρ ΠΏΠΎΠΌΠΎΡΡΡ Sentinel Envelope.

ΠΡΠΈΠΌΠ΅ΡΡ Π·Π°ΡΠΈΡΡ
ΠΠ»Ρ 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.
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. ΠΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π²ΡΠ΅Ρ
ΠΏΠ»Π°ΡΡΠΎΡΠΌ ΠΈ Π²Π΅ΡΡΠΈΠΉ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΊΠΎΠ»Π΅ΡΠ° Π½Π° Π²ΡΠ΅Ρ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ΠΈ Π²Π΅ΡΡΠΈΡΡ ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π² PyPI
- ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π² 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), ΠΏΠΎΠ΄ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ ΠΠΎΠ»Π°Π½Π° ΠΠ΅Π²ΠΈΠ½Π°, ΠΏΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ Π‘ΡΡΠ΄ΠΈΡ Π€ΡΠ°Π½ΠΊ-Π Π°ΡΡΠΈ Π΄Π»Ρ ΡΠ²ΠΎΡΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΠΈΡΠΊΠΎΠ² Π² Π£Π½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ΅ ΠΠ°ΡΠ½Π΅Π³ΠΈ-ΠΠ΅Π»Π»ΠΎΠ½Π°. ΠΠ΅Π· ΠΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ ΡΠΌΠ΅ΡΠ΅ΡΡ.
.