ΠΠΎΠ±ΡΡ Π΄Π΅Π½ Π½Π° Π²ΡΠΈΡΠΊΠΈ.
Π Π΄Π½Π΅ΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Python Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ Π² ΡΡΠ΅ΡΠ°ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ, Π½ΠΎ ΠΈ Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° ΠΈΠΌ. ΠΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π²ΠΎΠΏΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ ΠΈΡΠΊΠ°Ρ ΠΈΠ»ΠΈ Π½Π΅, ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π½Π°ΡΡΠ°Ρ Π½ΠΎΠ² Π΅Π·ΠΈΠΊ, Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅ Π΄ΠΎΠ±ΡΠΈ Bash ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Bash ΠΈ Python ΠΈΠΌΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ ΠΊΡΠΌ Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π½ΠΎΡΡΡ Π½Π° Bash ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π½Π° βΠ·ΠΌΠ΅ΠΉΡΠΊΠΈΡ Π΅Π·ΠΈΠΊβ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π° ΡΠ»ΠΎΠΆΠ½Π° ΠΈ Π΄Π°Π»Π΅Ρ Π½Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»Π½Π° Π·Π°Π΄Π°ΡΠ°.
ΠΠ° Π΄Π° ΠΎΠ±Π»Π΅ΠΊΡΠ°Ρ ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° Π΄Π΅Π²ΠΎΠΏΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈΡΠ΅, ΡΠ° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΈ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°Ρ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΠΈΠ»ΠΈΡΠΈ Π½Π° Python. ΠΠ°ΡΡΠΎΡΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡ ΠΎΠΏΠΈΡΠ²Π° Π΄Π²Π΅ Π½ΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ Π°Π²ΡΠΎΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ β ΠΈ β ΠΊΠΎΠΈΡΠΎ ΡΠ΅Π»ΡΡ Π΄Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΡΡ Π΄Π΅Π²ΠΎΠΏΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈΡΠ΅ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΠΎΡΠ΄Π΅Π»ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Python, ΠΎΡΡΠ°Π²ΡΠΉΠΊΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π° ΠΏΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΠ±Π»Π°ΡΡΡΠ° Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π΅ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠΈΠ»ΠΈΡΠΈ.
ΠΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°, ΠΌΠΎΠ»Ρ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π½Π°Π΄ΠΎΠ»Ρ.
ΠΠΎΠ²ΠΈ βΠ²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ΠΈβ?
ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ Π½ΡΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π½ΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ? ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅ΡΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ os.environ ΠΈ subprocess.?
ΠΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΠ²Π° Π² ΠΏΠΎΠ»Π·Π° Π½Π° Π²ΡΡΠΊΠ° ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Ρ ΠΎΡΠ΄Π΅Π»Π½ΠΎ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° smart-env
ΠΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΠΎ ΡΠΈ ΡΠ²ΠΎΡΠ΅Π½ΠΈΠ΅, Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ°Π·ΡΠΎΠ²ΠΈΡΠ΅ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ Π΄Π° ΠΏΠΎΡΡΡΡΠΈΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΈΠΌΠ° ΡΠΈΡΠΊ Π΄Π° Π½Π΅ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΎΡ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅, Π½ΠΎ ΡΠΎΠ²Π° Π΅ ΠΏΠΎ-ΡΠΊΠΎΡΠΎ βΡΡΡΠ°Ρ ΠΎΠ² ΡΠ»ΡΡΠ°ΠΉβ. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΡΡΠ°Π±ΠΎΡΠ²Π° ΠΈ ΡΠΏΠ΅ΡΡΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΡΡΠΈΠ»ΠΈΡ.
Π‘ΠΏΠΎΡΠ΅Π΄ Π±Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½ΠΎ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΈΠΌΠ° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΎΠ±Π²ΠΈΠ²Π°Ρ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ os.environ, Π½ΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π»Π΅ΡΠ΅Π½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΠΊΠ»Π°Ρ, ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΈ Π΄Ρ.);
- ΠΈΠΌΠ° Π΄ΠΎΠ±ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΠ±Π°ΡΠ΅ ΡΠ° Π·Π΄ΡΠ°Π²ΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° (Π³Π»Π°Π²Π½ΠΎ Ρ ΡΠ΅Π± ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΡΠΈ ΠΊΠ°ΡΠΎ Django) ΠΈ Π·Π°ΡΠΎΠ²Π° Π±Π΅Π· Π½Π°ΠΊΠΎΠ²Π°Π»Π½Ρ Π½Π΅ ΡΠ° ΡΡΠ²ΡΠ΅ΠΌ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½ΠΈ;
- ΠΈΠΌΠ° ΡΠ΅Π΄ΠΊΠΈ ΠΎΠΏΠΈΡΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½Π΅ΡΠΎ Π½ΠΎΠ²ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈ ΡΠ²Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠ°ΡΡΠ²Π°Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΡΡΠ΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΎΡ Π²ΠΈΠ΄Π°
get_(ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°)ΠΠ»ΠΈ Π΅ΡΠΎ , ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ±Π°ΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π²Π΅ΡΠ΅ ΠΎΡΡΠ°ΡΠ΅Π»ΠΈΡ Python 2 (Π½Π° ΠΊΠΎΠΉΡΠΎ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ , Π²ΡΠ΅ ΠΎΡΠ΅ ΠΎΡΡΠ°Π²Π°Ρ ΠΊΡΠΏΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ ΠΊΠΎΠ΄ ΠΈ ΡΠ΅Π»ΠΈ Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠΈ);
- ΠΈΠΌΠ° ΡΡΠΈΠ»ΠΈΡΠ½ΠΈ-ΡΡΡΠ΄Π΅Π½ΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π°Ρ Π° Π² upstream PyPI ΠΈ ΡΠ°ΠΌΠΎ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡ, ΠΈΠΌΠ΅ΡΠΎ βsmart-envβ Π΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½Π° ΠΌΡΡΠΊΠ°).
Π ΡΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄ΡΠ»Π³ΠΎ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠΎΡΠΊΠΈ Π±ΡΡ Π° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΈ, Π·Π° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠ°Π»Ρ ΠΈΠ΄Π΅ΡΡΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ Π½Π΅ΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½ΠΎ.
ΠΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ°, ΠΊΠΎΠΈΡΠΎ Π±ΡΡ Π° ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΡΠ΅Π΄ Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° smart-env:
- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ ΠΏΡΠΎΡΡΠ° ΡΡ Π΅ΠΌΠ° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅
- ΠΠ΅ΡΠ½Π° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ
- Π‘ΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ Python 2.7
- ΠΠΎΠ±ΡΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π° Ρ ΡΠ΅ΡΡΠΎΠ²Π΅
Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ°, Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ. ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°:
from smart_env import ENV
print(ENV.HOME) # Π Π°Π²Π½ΠΎ Π½Π° print(os.environ['HOME'])
# ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΠΊΠΈ, ΡΠ΅ ΡΡΠ΅ Π·Π°Π΄Π°Π»ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π° MYVAR Π½Π° "True"
ENV.enable_automatic_type_cast()
my_var = ENV.MY_VAR # Π Π°Π²Π½ΠΎ Π½Π° Π±ΡΠ»Π΅Π²ΠΎ True
ENV.NEW_VAR = 100 # ΠΠ°Π΄Π°Π²Π° Π½ΠΎΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°
ΠΠ°ΠΊΡΠΎ ΡΠ΅ Π²ΠΈΠΆΠ΄Π° ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π½ΠΎΠ²ΠΈΡ ΠΊΠ»Π°Ρ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ½Π΅ΡΠ΅ (Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ β ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΈΠ·Π»ΠΈΡΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅). ΠΠΎΡΡΡΠΏΡΡ Π΄ΠΎ Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π½Π΅Ρ ΠΊΠ°ΡΠΎ ΠΊΡΠΌ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΠΊΠ»Π°ΡΠ° ENV, ΠΊΠΎΠ΅ΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ·ΠΈ ΠΊΠ»Π°Ρ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΠ° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π° Π½Π°ΡΠΈΠ²Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ½Π° ΡΡΠ΅Π΄Π°, ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Ρ ΠΏΡΠ΅Π²ΡΡΡΠ° Π² Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΠΎΠ±Π΅ΠΊΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ° (ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° Π² Django, ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΠ°ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΡ ΠΎΠ±Π΅ΠΊΡ Π΅ ΡΠ°ΠΌΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»/ΠΏΠ°ΠΊΠ΅Ρ settings).
ΠΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ/ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° β enable_automatic_type_cast() ΠΈ disable_automatic_type_cast(). Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π°ΠΊΠΎ Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π° ΠΈΠΌΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ JSON-ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΎΠ±Π΅ΠΊΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΠΏΡΠΎΡΡΠΎ Π±ΡΠ»Π΅Π²Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° (ΡΠ²Π½ΠΎΡΠΎ ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° DEBUG Π² Django ΡΡΠ΅Π· ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π° Ρ βΠ΄ΠΎΠΏΡΡΡΠΈΠΌΠΈΡΠ΅β Π½ΠΈΠ·ΠΎΠ²Π΅ β Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½ΠΈΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ). ΠΠΎ ΡΠ΅Π³Π° Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ Π½ΠΈΠ·ΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ½ΠΎ β ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π΅ΡΠ΅ ΡΠ° Π·Π°Π»ΠΎΠΆΠ΅Π½ΠΈ Π² Π½Π΅Π΄ΡΠ°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΈ ΡΠ°ΠΌΠΎ ΡΠ°ΠΊΠ°Ρ ΡΠΈΠ³Π½Π°Π» Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. π Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ, ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡΡΠ° ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ Π½Π°Π»ΠΈΡΠ½ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ (Π½Π΅ ΡΠ° ΡΠ΅ΡΡΠ²Π°Π½ΠΈ frozenset, complex ΠΈ bytes).
ΠΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ΡΠΎ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Python 2 Π±Π΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π· ΠΆΠ΅ΡΡΠ²ΠΈ (ΠΎΡΠΊΠ°Π· ΠΎΡ typing ΠΈ Π½ΡΠΊΠΎΠΈ βΠ±ΠΎΠ½Π±ΠΎΠ½ΡΠ΅ΡΠ°β ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Python 3), Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΠΎΠΊΠΎΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ six (Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΠΎΠ²Π΅).
ΠΠΎ ΠΈΠΌΠ° ΠΈ Π½ΡΠΊΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Python 3 ΠΈΠ·ΠΈΡΠΊΠ²Π° Π²Π΅ΡΡΠΈΡ 3.5 ΠΈ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠ° (Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ ΠΈΠΌ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΠΈ Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ»ΠΈ ΠΎΡ ΠΌΡΡΠ·Π΅Π», ΠΈΠ»ΠΈ ΠΎΡ Π»ΠΈΠΏΡΠ° Π½Π° Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡΡΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΌΠΈΡΠ»ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈΠ²Π½Π° ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΡΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π΄Π° ΡΠ΅Π΄ΠΈΡΠ΅ Π½Π° 3.4);
- Π Python 2.7 Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π»ΠΈΡΠ΅ΡΠ°Π»ΠΈ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ . ΠΠΎ, Π°ΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΠΈΡΠΊΠ° Π΄Π° Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° β Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎΡΡΠ»:);
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ»Π΅Π΄Π²Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΏΠ°ΡΡΠΈΡΠ°Π½Π΅. ΠΠΊΠΎ Π½ΠΈΠ·ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Ρ ΠΎΡ Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ, ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΎΡΡΠ°Π²Π° Π½ΠΈΠ·ΠΎΠ²Π° (ΠΏΠΎ-ΡΠΊΠΎΡΠΎ ΠΎΡ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΠΏΠΎΠ·Π½Π°ΡΠ°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π² Bash).
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° python-shell
Π‘Π΅Π³Π° ΡΠ΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π·Π° Π²ΡΠΎΡΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° (ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈΡΠ΅ Π½Π° Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ Π°Π½Π°Π»ΠΎΠ·ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΠΌ β ΡΠΎ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΎΡΠΎ Π·Π° smart-env. ΠΠ½Π°Π»ΠΎΠ·ΠΈΡΠ΅ β ΠΈ ).
ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ, ΠΈΠ΄Π΅ΡΡΠ° Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ Π½Π΅Ρ ΡΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΈ Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ Π·Π° smart-env, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π²ΠΈΠΆΠ΄Π° ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
from python_shell import Shell
Shell.ls('-l', '$HOME') # Π Π°Π²Π½ΠΎ Π½Π° "ls -l $HOME"
command = Shell.whoami() # Π Π°Π²Π½ΠΎ Π½Π° "whoami"
print(command.output) # ΠΏΡΠΈΠ½ΡΠΈΡΠ° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»
print(command.command) # ΠΏΡΠΈΠ½ΡΠΈΡΠ° "whoami"
print(command.return_code) # ΠΏΡΠΈΠ½ΡΠΈΡΠ° "0"
print(command.arguments) # ΠΏΡΠΈΠ½ΡΠΈΡΠ° ""
Shell.mkdir('-p', '\/tmp\/new_folder') # ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° ΠΏΠ°ΠΏΠΊΠ°
ΠΠ΄Π΅ΡΡΠ° Π΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ°:
- ΠΠ΄ΠΈΠ½Π΅Π½ ΠΊΠ»Π°Ρ, ΠΎΠ»ΠΈΡΠ΅ΡΠ²ΠΎΡΡΠ²Π°Ρ Bash Π² ΡΠ²Π΅ΡΠ° Π½Π° Python;
- ΠΡΡΠΊΠ° Bash ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΊΠ°ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° ΠΊΠ»Π°ΡΠ° Shell;
- ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΠΏΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° Bash ΠΊΠΎΠΌΠ°Π½Π΄Π°;
- ΠΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° βΡΡΠΊ ΠΈ ΡΠ΅Π³Π°β Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅, Ρ.Π΅. ΡΠ°Π±ΠΎΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄;
- ΠΈΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π² stdout, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΊΠΎΠ΄Π° Π½Π° Π½Π΅ΠΉΠ½ΠΎΡΠΎ Π·Π°Π²ΡΡΡΠ°Π½Π΅;
- ΠΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Ρ Π½ΡΠΌΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° β Ρ Π²ΡΡΠ»Ρ ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊΡΠΎ Π² ΡΠ»ΡΡΠ°Ρ Ρ smart-env, ΠΎΡΠΈΠ³ΡΡΠ΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Python 2 (Π²ΡΡΠ½ΠΎ, Π½ΡΠΆΠ½ΠΎ Π±Π΅ΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΆΠ΅ΡΡΠ²ΠΈ) ΠΈ Π½ΡΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Python 3.0-3.4.
ΠΠ»Π°Π½ΠΎΠ²Π΅ Π·Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²Π΅ΡΠ΅: ΠΈ Π΄Π²Π΅ΡΠ΅ ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈ Π² ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ PyPI. ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½ Π½Π° Github (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ).
Π Π΄Π²Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Ρ Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ°, ΡΡΠ±ΡΠ°Π½Π° ΠΎΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½ΠΈΡΠ΅. Π, Π°ΠΊΠΎ Π² smart-env ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΌΠΈΡΠ»ΡΡ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ Π² python-shell ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈΠΌΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈ:
- ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ;
- Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ Ρ Π΅ΠΊΠΈΠΏΠ° (ΡΠ°Π±ΠΎΡΠ° Ρ stdin);
- Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, property Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° ΠΎΡ stderr);
- ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΡΠ° dir());
- ΠΈ Ρ.Π½.
ΠΡΡΠ·ΠΊΠΈ
- ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° smart-env: ΠΈ
- ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° python-shell: ΠΈ
- Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅
UPD 23.02.2020:
* Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅ ΡΠ° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅Π½ΠΈ, ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΡΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ
* ΠΠ΅ΡΡΠΈΡ python-shell==1.0.1 Π΅ Π² ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° 29.02.2020. Π‘ΡΠ΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ β ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄ΠΎΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° dir(Shell), ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Ρ Π½Π΅Π²Π°Π»ΠΈΠ΄Π΅Π½ Python ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΏΠΎΠΏΡΠ°Π²ΠΊΠ° Π½Π° Π±ΡΠ³ΠΎΠ²Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
