ΠΠ·Π»ΠΎΠΌΠ°Π² maya
Ρ ΠΈΠ·Π²Π»Π΅ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΠΊ ΠΌΠΎΠ΅ΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ pipenv
Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ
Python. Π― ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΡΠΈΠ΄Π΅ΠΌ ΠΊ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, (ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ) ΡΠ΅ΠΊΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π² pipenv
docs.
pipenv
ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ ΠΈ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½Ρ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ PythonΠ ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬
Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΎΠ±ΡΠΈΡ
(Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ) Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠ°Π·Π½ΡΡ
Π²Π΅ΡΡΠΈΡΡ
Python ΠΈ ΠΠ‘. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΡΠΎΠ³ΠΎΠΉ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ (Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π²ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ Β«ΠΡΠΎΠ±Π»Π΅ΠΌΡΒ»).
ΠΠΠΠΠ¦ Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠΠΠ―
TL; DR : Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² pipenv
Π² ΠΏΡΠΎΠ΅ΠΊΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π²Π½Π΅ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΊ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ Π΄Π΅ΡΠΆΠΈΡΠ΅ Pipfile
, Pipfile.lock
ΠΈ .env
Π²Π½Π΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΡ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΡ pipenv
Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² .gitignore
.
ΠΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ python Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡΠΈΠΉ setup.py
, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ
, ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΠΈΡ
ΡΡ Π²Π΅ΡΡΠΈΠ΅ΠΉ python ΠΈ / ΠΈΠ»ΠΈ ΠΠ‘.
ΠΡΠΈΠΌΠ΅ΡΡ: maya
, requests
, flask
ΠΈ Ρ. Π.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ (Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python) Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Python, ΠΠ‘ ΠΈ ΡΠ°ΡΡΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π² ΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
pipfile
ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΎ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ Pipfile vs setup.py .
pipenv
(ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ)Π― ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ pipenv
- ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ:
Pipfile.lock
) Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄ΡΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΡΠ΅Π΄Π΅ Python, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ.
ΠΡΠ·ΠΎΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ pipenv
Π²Π²ΠΎΠ΄ΠΈΡ Π² Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python ΠΈΠ»ΠΈ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΈΡ
ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ. ΠΠ°, pipenv
ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΌΠΎΡΡ (ΠΏΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Π½Π΅ΡΡΠΈ Π²ΡΠ΅Π΄ (ΡΠ°ΡΡΠΎ Π² ΡΠ΅ΡΡΠ°Ρ
CI ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±Π΅Π· Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΎΡΠΌΡΡΠ»Π΅Π½ΠΈΡ).
TL; DR : pipenv
ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΡΠ΅Π΄Ρ Π·Π° ΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½Π½ΡΡ
ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ
Π² ΡΠ°ΠΉΠ»Π΅ Pipfile.lock
Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ python ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Pipfile.lock
).
pipenv
ΡΠ²Π΅ΡΠΈΡΡΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ
ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΠ°Π³ΠΎΠ²:
Pipfile
)Pipfile.lock
Pipfile.lock
ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ Pythonpipenv sync
Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ "Π·ΠΎΠ»ΠΎΡΠΎΠ³ΠΎ" Pipfile.lock
Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ ΡΡΠ΅Π΄Ρ Python.ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ python ΡΠ°ΠΊΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π½Π΅ Π΄ΠΎΠ±ΠΈΡΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ . ΠΠ°ΡΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° (ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ python) ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ°ΠΊΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, ΠΊΠ°ΠΊ:
setup.py
setup.py
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π· install_requires
.
ΠΡΠ»ΠΈ Pipfile
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΡΠΊΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠ°ΠΊ:
install_requires
Pipfile
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° (Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ Π²Π΅ΡΡΠΈΠΉ ΠΈ Ρ. Π.) ΠΠ»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π° install_requires
- Π½Π΅Ρ.Π§ΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΡΠΎΠ±Π»ΡΠ΄Π°ΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°:
Pipfile
[packages]
Π² Pipfile
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΏΡΡΡΡΠΌ, Π»ΠΈΠ±ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΡΠ°ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.Pipfile.lock
Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΠ₯ΡΠ°Π½ΠΈΡΡ Pipfile.lock
(ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΎ Β«ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈΒ») Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ:
Π§ΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΡΠ»Π΅Π΄ΡΠ΅Ρ:
Pipfile.lock
ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² .gitignore
tox
(ΡΠΎΠΊΡΡΡΠΈΠ΅ usedevelop
)ΠΡΠ»ΠΈ tox.ini
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ²ΠΎΠ΅ΠΌ commands
Π·Π°ΠΏΠΈΡΠΈ ΡΠ°Π·Π΄Π΅Π»Π°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:
pipenv install
pipenv install --dev
pipenv lock
ΡΡΠΎ ΡΠ°ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ:
pipenv install
ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΈ tox
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) ΡΠΎΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ. ΠΠΎΠΌΠΈΠΌΠΎ Π΄Π²ΡΠ»ΠΈΡΠΈΡ, ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ usedevelop=True
ΠΈ usedevelop=False
Π² tox.ini
ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Pipenv
ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ°Π·ΠΈΡΡ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ (ΠΈ tox.ini
Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² ΡΠ°Π·Π½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
).Π§ΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΡΠ»Π΅Π΄ΡΠ΅Ρ:
pipenv
Π² tox.ini
. Π‘ΠΌΠΎΡΡΠΈΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ tox.inipipenv
Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρpipenv
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠ°Π΄ΠΈΠΈ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ-ΡΠΎ Π»ΠΎΠΌΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π°ΡΡΡΠ°Π΅Ρ Π²Π°ΡΡ ΡΠ±ΠΎΡΠΊΡ CI, Π΅ΡΡΡ ΡΠ±ΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pipenv
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ (ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ Π·ΡΠ΅Π»ΡΠ΅).
Π§ΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΡΠ»Π΅Π΄ΡΠ΅Ρ:
pipenv
Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΠΈ CI, tox.ini
ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ. ΠΡ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊΡΡ ΡΠ΅Π½Π½ΠΎΡΡΡ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡ ΡΡΠΎΠ³ΠΎ? ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ?ΠΠ»ΡΡΠ΅Π²ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ»ΠΈ pipenv
Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ python:
pipenv
ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΈΠ½ΠΎΡΠΈΡ A: ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Virtualenv.pipenv
? Π: Π£ΠΏΡΠ°Π²Π»ΡΠΉΡΠ΅ virtualenv.ΠΠ°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΈ Ρ ΠΈΡΡΠΎΡΡΠ΅ΠΉ.
pipenv
Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π²Π°ΡΠ΅ΠΌΡ ΠΏΠ°ΠΊΠ΅ΡΡΠΠ΅ ΠΏΡΠΎΡΠ°Π»ΠΊΠΈΠ²Π°ΠΉΡΠ΅ ΡΡΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ Π²Π°Ρ ΡΠ°Π·ΠΎΡΠ°ΡΡΠ΅Ρ.
ΠΠ°ΡΠΈΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ (ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½Π½ΡΡ ) Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅ΡΡΠΎ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΌ ΡΡΠ°ΠΏΠ΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
Pipfile
, Pipfile.lock
ΠΈ .env
Π²Π½Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² .gitignore
.
Pipfile
Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΡΠΎΠ·Π΄Π°ΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ»ΠΈ Π²ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΡΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² Π²Π°ΡΠ΅ΠΌ setup.py
. Π ΡΠ°ΠΉΠ» .env
Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ ΡΠ°Π·Π³Π»Π°ΡΠ΅Π½ΠΈΡ.
Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π²Π½Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΎ ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ CI ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ pipenv
Π² Π½Π΅ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΠΈΡΡΠ°ΡΠΈΡΡ
.
pipenv
ΠΊΠ°ΠΊ Π»ΠΈΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°pipenv
ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΊΠ°ΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ virtualenv.
Π£Π»ΠΎΠ²ΠΊΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊ Π±ΡΡΡΡΠΎ Π²ΠΎΡΡΠΎΠ·Π΄Π°ΡΡ Π²Π°ΡΠΈ (ΡΠ°ΡΡΠ½ΡΠ΅) ΡΠ°ΠΉΠ»Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ pipenv
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
$ cd <project_repository>
$ # your library will bring the dependencies (via install_requires in setup.py)
$ pipenv install -e .
$ # add more dev tools you preffer
$ pipenv install --dev ipython pdbpp
$ # start hacking
$ pipenv shell
...
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ .env
file, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΠΌΠ½ΠΈΡΠ΅: Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ pipenv
Π² Π²Π°ΡΠΈΡ
ΡΠ±ΠΎΡΠΊΠ°Ρ
CI, ΠΈ Π²Π°ΡΠ° ΠΆΠΈΠ·Π½Ρ ΡΡΠ°Π½Π΅Ρ ΠΏΡΠΎΡΠ΅.
setup.py
Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉΠ Π²Π°ΡΠ΅ΠΌ setup.py
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°Π·Π΄Π΅Π» extras_requires
:
from setuptools import setup
setup(
name='mypackage',
....,
install_requires=["jinja2", "simplejson"],
extras_require={
'tests': ['pytest', 'pyyaml'],
'pg': ['psycopg2'],
},
....
)
Π§ΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π·Π°ΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π΄Π»Ρ tests
extra:
$ pipenv install -e .[tests]
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ install_requires
.
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π° ΡΠ°Π·Π΄Π΅Π»Ρ default ΠΈ dev, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ .
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ΅Ρ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅
/ cc @uranusjr @jtratner @ncoghlan
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ maya
:
pendulum>=1.0
Π² setup.py: Π²Π΅ΡΡΠΈΡ Π±ΡΠ»Π° Π² Pipfile, Π½ΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°Π»Π° Π² setup.py)pipenv
ΡΠ»ΠΎΠΌΠ°Π»Π° Π²Π΅ΡΡ ΠΏΡΠΎΠ±Π΅Π³ Travis)ΠΠ½Π΅ ΡΡΠΎ ΡΠΎΠΆΠ΅ Π½ΡΠ°Π²ΠΈΡΡΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΌ ΡΡΠΎΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Pipenv ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Python Packaging .
Π‘Π»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ²Π΅ΡΠ°, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Β«ΠΎΡΠΊΠ°ΠΆΠΈΡΠ΅ΡΡ ΠΎΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ / Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΉ CIΒ», ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½Π΅ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠΌ.
Π§ΡΠΎ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌ?
@ tsiq-oliverc ΠΠ΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅ΡΡΠΎ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΎ.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π±Π΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΠΏΡΡΠΊΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python:
Pipfile.lock
Pipfile.lock
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
Π² Pipfile
Pipfile.lock
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ±ΠΎΡΠΊΠ° Pipfile.lock
Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ CI Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌΠ°.ΠΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΈΡ
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΡΠΈΠ»ΠΈΠΉ. Π Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ββΠ² Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· Π½Π΅Π΄Π΅Π»Ρ ΠΏΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΠΎΡΠ²ΡΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π΄Π²Π΅), ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ°, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Pipfile.lock
, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ.
ΠΠΎΠ½ΡΠ»ΠΈΠΊΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΡΡΠΎΠ³ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠ»ΠΈ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ Π΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python - ΠΎΠΏΠΈΡΠΈΡΠ΅ Π΅Π΅.
@vlcinsky - ΠΡΠ»ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π²Π°ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ Ρ. Π΄., ΡΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ Π² Π²Π°ΡΠ΅ΠΉ Π²Π»Π°ΡΡΠΈ. Π’Π°ΠΊ ΡΡΠΎ Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ Ρ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ.
ΠΠΎ ΡΠ΅Π»Ρ Π·Π΄Π΅ΡΡ, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Ρ Π±Ρ Π²ΠΈΠ΄Π΅Π» ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅Π»ΠΈ Π΄Π»Ρ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ):
ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ΅Ρ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°.
ΠΡΠ°ΠΊ, Π΄Π°, Ρ Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Python A, B ΠΈ C Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΈ ΠΎΠ½ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΠΈ Ρ. Π.) ΠΠ΅ ΡΠ°Π·ΡΠ΅Π·Π°Π» Π΅Π³ΠΎ, ΡΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠΈ ΡΠ°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΠΈΠ»ΠΈ ΡΡΠΎ Π±Ρ Π½ΠΈ).
ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Pipenv, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Pipfile
s Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ CI.
ΠΠ½Π΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (+ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅) Π΄Π»Ρ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΈ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Python, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°. Π ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ pipenv ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ virtualenv, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΡΡΠ½ΡΠΌ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ.
Π Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ββΠ² Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· Π½Π΅Π΄Π΅Π»Ρ ΠΏΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΠΎΡΠ²ΡΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π΄Π²Π΅), ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ°, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ
Pipfile.lock
, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΡΠ°ΡΠ΅Π»ΠΎ.
ΠΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²Π΅ΡΠ½ΠΎ. Π ΠΌΠΈΡΠ΅ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Ρ Π²Π°Ρ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ΅Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ, ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, Π° Π½Π΅ ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
(ΠΠ°, Ρ Π³ΠΎΠ²ΠΎΡΡ ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π° Π½Π΅ ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ...)
@ Moritz90 Π²Π°Ρ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅, ΠΈ ΡΠ°ΠΌ pipenv
ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΠ΅Π΄Π°.
ΠΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π°ΡΠ΅Π»Π΅Π½ΠΎ Π½Π° ΠΎΠ±ΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ flask
, request
, maya
ΠΈ Ρ. Π., ΠΠ΄Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΡΠΉ. ΠΡΡΠ°ΡΡΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΠ°ΡΡ Π²Π΅ΡΠ΅ΠΉ Π² maya
Ρ ΡΠ°ΡΡΡΡΠΎΠΈΠ»ΡΡ, ΡΠ·Π½Π°Π², ΡΡΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ pipenv
Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ (ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ), Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ΅. ΡΠ΅Π½ΠΈΡΡ.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ - ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π°ΡΡΠ°Ρ. Π Π΅ΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠΏΠ»Π°ΡΠΈΡΡ Π·Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ - ΠΈ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ Ρ ΠΎΡΠ΅Π» ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ.
Π― Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π½Π΅ Ρ
ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΡΠ±ΠΎΡΠΊΠΈ Π±ΡΠ»ΠΈ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π°ΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΡΠ΅ ΡΠ²ΠΎΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ==
, Π²Ρ ΠΎΠ±ΡΠ·ΡΠ΅ΡΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π²Π΅ΡΡΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π½Π°ΡΡΡΠ°ΡΡΠ΅Π΅ ΡΠ±ΠΎΡΠΊΡ Π½Π° CI, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ
ΠΎΡΠΎΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠΎΠ»Π½ΠΎΡΡΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Pipenv) ΠΌΠ°ΡΠΊΠΈΡΡΡΡ ΡΡΠΎ. ΠΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΡΠΎΠ³ΠΎ Ρ
ΠΎΡΠΈΡΠ΅, ΡΡΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΡΠ°ΠΌΠΎΠ΅ Π»ΡΡΡΠ΅Π΅.
@uranusjr - ΠΠΎΠ½Π΅ΡΠ½ΠΎ. Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ Β«Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΉΒ», ΡΠΎ Π²Π΅ΡΡ
Π½ΠΈΠΉ ΡΠΎΠ²Π΅Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ». Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΡΠΎ ΠΏΠΎΡΡΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΡ, ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ: Β«ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Ρ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ( pipenv
), ΡΠ΅Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ - Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈΒ» π.
ΠΠΎ ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ΅Π»Ρ Π² ΡΠ΅Π»ΠΎΠΌ.
@ tsiq-oliverc Ρ ΠΎΡΠΎΡΠ΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ - ΠΎΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅Π»Π΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅. Π― Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅: Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌ CI Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΡΡΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅.
ΠΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Pipenv.lock
, ΡΠΎΠ·Π΄Π°Π΅ΠΌ virtualenv Π½Π° Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ CI-ΡΠ΅ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, - ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ»ΠΎΠΌΠ°Π½Π° Π² ΡΡΠΎΠΌ ΠΏΠ»Π°Π½Π΅ - ΠΏΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΡΠΎΠ΅Ρ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΡΠ΅ΠΌ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π·Π°ΠΏΡΡΠΊ CI. ΠΡΠ»ΠΈ Π΅ΡΡΡ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ ΡΠΎ, ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡ Π·Π° ΡΠ°ΡΡΠ½ΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ pypi, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌ), Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ.
ΠΠ΅ ΠΏΠΎΠΉΠΌΠΈΡΠ΅ ΠΌΠ΅Π½Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ: Π½Π΅Ρ ΠΆΠ΅Π»Π°Π½ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, Ρ Ρ ΠΎΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ±ΠΎΡΠΊΠΈ CI, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ°Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
@vlcinsky ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π΅Π³ΠΎ. Π’Π΅ΠΊΡΡΠ°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΡ:
ΠΠ»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π· install_requires Π² setup.py. [...]
ΠΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΌΠ΅ΡΡΠΎ ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π² Pipfile ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡΠ° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² Pipfile.lock. [...]
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Pipfile ΠΈ pipenv ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ ΡΠ°ΠΊ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ.
(ΠΡΠ΄Π΅Π»ΠΈΠ» ΡΡ ΡΠ°ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅.)
Π― ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΡ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊ ΠΈ Π±ΡΠ΄Π΅Ρ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π²Π°Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΏΠΎΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠΈΡ Π·Π°ΡΠ²Π»Π΅Π½ΠΈΠΉ Π±Π΅Π· ΠΎΡΠΊΠ°Π·Π° ΠΎΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ, ΡΡΠΎ Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π½Π° PyPI.
@ Moritz90 ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½. Π― ΠΏΡΡΠ°Π»ΡΡ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΡΠΎΡ ΡΠΎΠΊΡΡ, Π½ΠΎ ΠΌΠΎΠ³Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΌ.
@ Moritz90 Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π²ΡΡΡΠΏΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΠΊΡ, ΠΎΡΡΠ°ΠΆΠ°ΡΡΡΡ Π²Π°Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ.
@vlcinsky - Π ΡΡΠΎΠΌ Π΅ΡΡΡ ΡΠΌΡΡΠ». Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ Π²Π°ΠΌ ΡΠ²Π½ΠΎ Π½Π΅ Π½ΡΠΆΠ½Ρ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, Π½ΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ ΡΠΎΠΌΡ, ΡΡΠΎ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΈΡΠ΅ (Ρ. Π. ΠΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π²Π°ΡΠ΅Π³ΠΎ Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°).
ΠΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅ Π²ΡΠ»ΡΡ : ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠΈΡΡ ΡΡΠΈ Π΄Π²Π΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΠ²ΡΠ΅ ΡΠ΅Π»ΠΈ? ΠΠ΄Π½Π° ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ - ΠΈΠΌΠ΅ΡΡ Π΄Π²ΡΡ ΡΡΠ°ΠΏΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ CI:
Pipfile.lock
Π² Π²Π°ΡΠ΅ΠΌ ΡΠ΅ΠΏΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎ.pipenv update
Π° Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΈΠ· Π²ΡΠ΅Ρ
Π²Π°ΡΠΈΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (ΡΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π±Π΅Π· ΡΠ°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Ρ Π΄ΡΠΌΠ°Ρ?).@ tsiq-oliverc Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, Ρ Π±Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π» ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅:
pipenv
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ pipenv
Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΡΠ°ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ.
$ git clone <repo_url> <project_dir>
$ cd <project_dir>
$ pip install pipenv
$ $ # clean pypi cache and make it ready to cache somehow - not described here
$ pipenv install -e .[test]
$ # if we need extra testing packages in pipenv
$ pipenv install <extra_test_packages>
$ # record current requirements expressed in `Pipfile.lock`
$ pipenv lock
$ # if needed, record the `Pipfile.lock` somewhere
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ²Π»ΡΡΡΡΡ:
Pipfile.lock
Π²ΠΈΠ΄Π΅ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡΠ΅Π΄Ρ)Π΅ΡΡΡ ΡΠ°Π·Ρ:
tox
, pip
ΠΈ Ρ. Π΄., ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ΅Ρ pypipipenv
)Pipfile.lock
Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ pypi, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ°ΠΉΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.ΠΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Pipfile
ΠΈΠ»ΠΈ Pipfile.lock
. Π’Π°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ² Π² ΡΠ°Π·Π½ΡΡ
ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ
Π²ΡΠ΅Π³Π΄Π° ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ( Pipfile.lock
Π²ΡΠ΅Π³Π΄Π° ΠΏΠ΅ΡΠ΅ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅).
ΠΠ΅Ρ pypi - ΡΡΠΎ ΡΠ°ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΌΠ°Ρ, ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, pipenv
ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ² ΠΏΠΎΠΌΠΎΡΡ Ρ ΡΡΠΈΠΌ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° β1731 - ΡΡΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ°Ρ ΡΠ°ΡΡΡ.
ΠΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½Π°ΡΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠΎ Π΅ΡΡΡ Π±Π΅ΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΎΠΆΠΈΠ΄Π°Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ pytest-pypi
.
ΠΡΠ΅Π½Ρ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΎΠΆΠΈΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΠ΅ΠΌΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½ΡΠ°Π½Ρ Π²Π°ΠΆΠ΅Π½, ΠΈ Π²Ρ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅, ΡΠ°ΠΊ ΠΈ Π½Π΅Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
Π²Ρ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅, ΡΠ°ΠΊ ΠΈ Π½Π΅Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π― ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π₯ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ - Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ ΡΠ²Π½ΠΎΠ΅ Β«Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ ΠΈΡΠΏΡΠ°Π²Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅Β» Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΡ ΡΠ±ΠΎΡΠΎΠΊ ΠΈ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ Π½Π° ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎ-ΡΠΎ ΡΠ»ΠΎΠΌΠ°Π΅Ρ, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΡ ΠΌΠΈΠ½ΠΎΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΉ / ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΎΡΠΈΠ±ΠΎΠΊ.
(ΠΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΎΡΠ΅Π½Ρ Π»ΠΈΡΠ½ΠΎΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΎ, ΡΡΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠ³Π»ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Ρ, Π½ΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠΏΠΎΡΠ½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π·Π° ΡΠ΅ΠΌΠ²Π΅ΡΠΎΠΌ.)
@ Moritz90 @techalchemy @uranusjr @ tsiq-oliverc
ΠΠΎΡ ΠΌΠΎΠ΅ ΡΠ΅Π·ΡΠΌΠ΅ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ.
Pipfile.lock
?ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΠ‘ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python Π²Π½ΠΎΡΡΡ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΠΌΠ°ΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Flask ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π²ΠΈΠ΄Π½Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ CI):
ΠΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ 9 ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π½ΡΠ΅ Pipfile.lock
.
ΠΡΠΎ ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ?
ΠΠ°ΡΠΈΠ°Π½ΡΡ:
Pipfile.lock
Π΄Π»Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (ΠΊΠ°ΠΊΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ?)ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅: ΠΏΡΡΡΡ CI ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ pipenv install -e .
. ΠΠ΅ Π²ΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ΅ΠΏΠΎ, ΠΏΠΎΠΌΠΎΠ³ΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Pipfile.lock
Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ±ΠΎΡΠΎΠΊ.
ΠΡΠΈ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΎΡ pypi, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠ΅Π΄Ρ ΠΈΠ· Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ°.
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
Pipfile.lock
ΠΏΠΎΠΌΠΎΡΡΡ pipenv install -e .
Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ pipenv lock
.Pipfile.lock
ΠΈΠ· Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ°.Pipfile.lock
Π² tox.ini
.setup.py
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° setup.py
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π° (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π² install_requires
, ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²Π΅ΡΡΠΈΠΈ ΠΈ Ρ. Π.), Π ΡΠ΅ΡΡ CI Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΡΡΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ ββΠΏΡΠΎΠ±Π»Π΅ΠΌΡ (ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ).
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
pipenv install -e .
ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΡΠΎ ΠΈ ΠΏΡΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ (Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ ΡΡΠΈΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ).pipenv
) ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠ°Π²Π½ΠΈΡΠ΅, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ pip freeze
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ pipenv
.ΠΠ΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ Π΅Π³ΠΎ. CI Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΎΡΠΊΠ°Π· ΠΏΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅.
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
Pipfile.lock
, ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π² Π½Π΅Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅)ΠΠΎ Π²ΡΠ΅Ρ
ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΡΠ΅ΠΆΠΈΠΌΠ°Ρ
Ρ ΡΡΠ°ΡΠ°Π»ΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² pipenv
Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, ΠΈΠ·Π±Π°Π²Π»ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» (Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ !!!).
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΌΠΎΠ΅Π³ΠΎ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°, 2-ΠΉ ΠΈ 3-ΠΉ ΡΠ΅ΠΆΠΈΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ pipenv
Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ
CI.
ΠΡΠΎΡΡΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ Ρ ΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ°ΡΡΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ.
ΠΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅, Π² ΡΡΡ pipenv
ΠΈ Π½Π΅ ΡΡΠ»ΠΎΠΆΠ½ΡΠΉΡΠ΅ Π·Π°Π΄Π°ΡΡ.
Π Π΅Π΄ΠΊΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈ Π½Π΅ ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°ΡΡ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ CI.
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ΅ΡΡ CI, Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ Pipfile.lock
ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠ΅Π΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ.
Pipfile.lock
ΡΡΠ°Π½Π΅Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠΌ CI.
ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠΉΠ΄Π΅Ρ Π½Π΅ ΡΠ°ΠΊ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Pipfile.lock
ΠΈΠ· ΡΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Ρ
ΠΎΡΠ΅Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Pipfile.lock
ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, CI Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΠΎΠ·Π΄Π°ΡΡ Pipfile.lock
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° (ΠΌΠ΅ΡΡΡ?).
ΠΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ CI, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π²Π° ΡΠ°Π·Π½ΡΡ
Π·Π°Π΄Π°Π½ΠΈΡ (ΠΎΠ΄Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Pipfile.lock
, Π΄ΡΡΠ³ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΅Π³ΠΎ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π² ΡΠ΅ΡΡΠ°Ρ
).
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: Pipfile.lock
Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, setup.py
ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π»Ρ Β«ΠΠ΅Π΄Π½ΠΈΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π°Β» ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠ° Β«Π±Π΅Π»ΠΊΠ°Β», ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΡΠ°ΡΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π½Π΅Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ.
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΡΡ ΡΠ΅ΠΆΠΈΠΌ Π·Π° ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ.
ΠΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π±Ρ:
ΠΡΡΠΊΠ°Ρ ΠΏΡΠΈΠ±ΡΠ»Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ ΡΡΠΎΠΈΡ.
ΠΡΠ»ΠΈ ΡΠ΅Π»Ρ Π·Π΄Π΅ΡΡ - ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠΎ, ΡΠ΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±Π΅Π·ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΡΡΠΎ-ΡΠΎ ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΎΡ Β«Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ Π»ΡΡΡΠΈΠΌ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΠΌ (Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ) ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠΎΠΊΠ° Ρ Π²Π°Ρ Π½Π΅ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π²ΡΠ±ΠΎΡΠ°Β».
@vlcinsky ΠΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Β«Π Π΅ΠΆΠΈΠΌ: ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ Π·Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΒ» ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ Pipfile.lock
Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ
ΡΠ°Π½ΠΈΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΡΠ²ΠΈΠ² Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°. Π‘ ΡΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ»ΠΎ Π±Ρ Ρ
ΠΎΡΠΎΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². ΠΠ°ΠΊ ΠΈ @ tsiq-oliverc, Ρ Π±Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ.
Π§Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Ρ Π΄ΡΠΌΠ°Ρ ΠΎΠ± ΡΡΠΎΠΌ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ²ΡΡΠ²ΡΡ, ΡΡΠΎ ΡΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΡΠ°Π½Π΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΎΠΌ ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ pipenv
Π΄Π»Ρ ΡΠ±ΠΎΡΠΎΠΊ CI - ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΠΈΠ΄Π΅Ρ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
@ tsiq-oliverc ΠΠΎΠ΄Π°Π²Π»ΡΡΡΠ΅Π΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² python Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Β«ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ, Π€ΠΎΡΡΠ΅ΡΡ, ΠΡΠΏΠΎΠ»Π½ΠΈΡΡΒ». Π― ΠΏΠΎΠΌΠΎΠ³ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΈΠ· ΡΡΠΈΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π²Π²Π΅ΡΡΠΈ tox
ΠΈ pytest
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΡΠ²ΡΡΠ²ΠΎΠ²Π°Π», ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΠΎΠ²Π°ΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ
ΠΎΡΠΎΡΠΎ.
Π’Π΅ΠΏΠ΅ΡΡ Π΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΈ ΠΌΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pipenv
Π² ΠΎΠ±ΡΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
Python, ΡΡΠΎΠ±Ρ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Ρ. Π― Ρ
ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Ρ
ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ
ΡΠ΅ΡΠ΅ΠΏΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ°Π²Π΄Π°Π½Ρ ΠΈ ΠΊΠΎΡΠΎΡΡΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ.
Π§ΡΠΎ Π±Ρ Ρ ΡΠΊΠ°Π·Π°Π» ΠΏΡΠΎΠ΅ΠΊΡΡ Flask?
Pipfile.lock
ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΠΈΡ
ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ?Pipfile.lock
Π΄Π»Ρ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΡ-ΡΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΉ ΡΠ΅ΡΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅?Π¦Π΅Π»Ρ - Π½Π°ΠΉΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΡΠΈΠ»Ρ ΡΠ°Π±ΠΎΡΡ. ΠΡΠ»ΠΈ ΠΎΠ½ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° doc - Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ - Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
@vlcinsky Π― Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ (1) ΠΈ (4) Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². Π₯ΠΎΡΡ Π±Π΅Π· ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Pipfile.lock
Π²Ρ Π½Π΅ Π±ΡΠ΄Π΅ΡΠ΅ Π·Π½Π°ΡΡ Π²Π΅ΡΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΡΠ±ΠΎΡΠΊΠ΅ Π·Π°ΡΠ°Π½Π΅Π΅ (ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ
ΡΡΠ΅Π΄), Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π΅ΡΠ»ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΠ΅ ΠΈ Π·Π°Π°ΡΡ
ΠΈΠ²ΠΈΡΡΠ΅ΡΠ΅ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ : Π²Π΅ΡΡΠΈΡ tl; dr ΠΌΠΎΠ΅ΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ:
pipenv
ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Π² Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ.Pipfile.lock
Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ. (ΠΡΠΎ ΡΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.)Pipfile.lock
Π½Π° Π»Π΅ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΉ CI-ΡΠ±ΠΎΡΠΊΠ΅ ΠΈ Π·Π°Π°ΡΡ
ΠΈΠ²ΠΈΡΡΠΉΡΠ΅ Π΅Π΅ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.(ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π² ΡΠ°ΠΌΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ².)
@ Moritz90 Π― ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Β«Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΈ Π·Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΒ», ΠΊΠ°ΠΊ Π²Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ.
Re (1): Π»Π΅Π³ΠΊΠΎ ΡΠΊΠ°Π·Π°ΡΡ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, Π½Π΅ Π²Π΄Π°Π²Π°ΡΡΡ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ.
ΠΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ (4): Π΄Π°, Ρ ΡΠΎΠΆΠ΅ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Β«Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΈ Π·Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΒ» - Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΉ ΡΠ΅ΠΆΠΈΠΌ. ΠΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Flask Ρ Π½Π΅ ΡΠ΅ΡΡΡΡ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ).
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Pipfile.lock
Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅: Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡΡ (ΠΏΠΎΠ»Ρ) Π²ΡΡΡΠ½ΡΡ ΠΈΠ»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ Π²Ρ Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ³ΠΎ pypi, Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠ°ΡΡΠ½ΡΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ( devpi-server
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ Π² ΡΡΠΎΠΌ - Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠ°Ρ Π²ΠΎΠ»Π°ΡΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π΄Π»Ρ Π²Π½Π΅ΡΠ½ΠΈΡ
ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ Ρ. Π΄.). ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ Pipfile.lock
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΊΠΎΠΉ ΡΡΠ΅Π΄Π΅, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΡΠ°ΠΌ, ΠΊΡΠΎ-ΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΡΠ°ΡΡ ΠΈ ΡΡΠ²Π΅ΡΠ΄ΠΈΡΡ Π΅Π΅. ΠΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ CI Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ, ΡΡΠΎ ΠΎΠ½Π° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π»ΠΎΠΌΠ°Π΅Ρ. Π Ρ ΠΏΠΎΠΌΠΎΡΡΡ pipenv check
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°.
ΠΡΠΌΠ°Ρ, ΡΠ°ΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π±ΡΠ» Π±Ρ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΊΡΠΎ-ΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π» Π΅Π³ΠΎ (ΠΏΠΎΠ»Ρ) Π²ΡΡΡΠ½ΡΡ. ΠΠΎ ΠΌΠΎΠΈ Π·Π½Π°Π½ΠΈΡ ΠΎ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΠΎΡΠ΅Π½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ.
ΠΡΠΈΠ²Π΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° pipenv. Π― ΡΠ°Π·Π΄Π΅Π»ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ Π² ΡΡΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π»ΡΠ±ΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Pipfile / pipenv ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡ ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΡ Π±ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ pipenv.
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ:
ΠΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° python, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° Π½Π°ΡΠ΅ΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ pypi ΠΈ Ρ. Π., Π Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΠΌΠΎΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² python (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, cfgtree , txrwlock , pipenv-to-requirements ) Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠΆΠ΅ Π·Π½Π°ΡΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ Π°Π±ΡΡΡΠ°Π³ΠΈΡΡΠ΅Ρ ΡΡΠΈ Π΄Π΅ΡΠ°Π»ΠΈ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΆΠΈΠ·Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Python: PBR.
PBR ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°Π΅Ρ requirements.txt
Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΉ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ, ΠΈ Π²Π½Π΅Π΄ΡΡΠ΅Ρ Π΅Π³ΠΎ Π² install_requires
ΠΈΠ· setup.py
. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ requirements.txt
ΡΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΌΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠΎΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Pipfile
Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π° Π² PBR, Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pipenv-to-requirements, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ requirements.txt
ΠΈΠ· Pipfile
ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΠΈ ΠΎΠ±Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ. Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΈ PBR ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΠΊΡΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pipenv
Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ requirements.txt
Π― ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π°Π΄ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Pipfile Π΄Π»Ρ PBR, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΌΠΎΠ³ ΡΠΈΡΠ°ΡΡ Pipfile
(Π° Π½Π΅ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ) ΠΈ Π²ΡΡΠ°Π²Π»ΡΡΡ Π΅Π³ΠΎ Π² install_requires
ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ Ρ requirements.txt
.
Π― Π½Π΅ Π·Π½Π°Ρ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π»ΡΠ΄ΡΠΌ (Π²Π΅ΡΡΠΈΡ ΠΈΠ· ΠΈΡΡΠΎΡΠΈΠΈ git, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ AUTHORS ΠΈ ChangLog).
ΠΠΎ, Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ²ΡΡΠ²ΡΡ, ΡΡΠΎ ΠΏΠΈΡΠ°ΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅, ΡΡΠΎ ΠΌΠ½Π΅ Π±ΡΠ»ΠΎ Π±Ρ Π³ΡΡΡΡΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΡΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ. Π― ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°Ρ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Β«ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉΒ» ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python Π² ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.
Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° "ΡΠΈΡΠ΅ΡΡΡΠ²ΠΎ" Π½Π° Π²ΡΠ΅Ρ
ΡΡΡΠ΄Π½ΠΎΡΡΡΡ
, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΠΈ pipenv, Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² ΡΠ°Π±ΠΎΡΠ° ΡΠ΄Π΅Π»Π°Π½Π°, ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ ΡΡΠ°ΡΡΠ»ΠΈΠ²Ρ Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. Π§Π°ΡΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ python, ΠΊΠΎΡΠΎΡΡΡ Ρ Π΄Π°Ρ Π½ΠΎΠ²ΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ python Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ python, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅ΠΉ install_requires
Π²ΡΡΡΠ½ΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° PBR
ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΡΠ°Π½Π΅Ρ ΠΏΡΠΎΡΠ΅ ( ΠΈ, ΡΠ΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Ρ ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ pbr Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³Π° Π²Π΅ΡΡΠΈΠΈ semver).
ΠΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠ°ΠΊ readthedocs ΠΈΠ»ΠΈ pyup (Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ pyup ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΌΡΡΠ»Π° ΠΏΡΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠΈ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ).
Π― Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°ΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ°ΠΊ Β«ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉΒ» ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° python, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Β«OpenStackΒ», Π½ΠΎ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ, ΠΈ Π΅ΡΠ»ΠΈ Ρ Π΄ΡΡΠ³ΠΈΡ Π±ΡΠ΄Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΠ²ΡΠΉ ΠΎΠΏΡΡ, Ρ Π±ΡΠ΄Ρ ΡΠ°Π΄ ΠΈΡ ΡΡΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΡ ΡΠΎΡΠΊΡ Π·ΡΠ΅Π½ΠΈΡ.
ΠΠΎΠΌΠ°Π½Π΄Π°, ΡΡΠΎ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΡΠ°Π·Π΄Π΅Π»Π΅ "ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°" Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ? Π§ΡΠΎΠ±Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΠΊΠ°ΠΊ Ρ, ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ pipenv, Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ pipenv?
PS: Π― ΠΌΠΎΠ³Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΡΠΎ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ Π·Π°Π³ΡΡΠ·Π½ΡΡΡ ΡΡΡ Π²Π΅ΡΠΊΡ.
@vlcinsky (1) ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ - ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΠ²ΠΎΠ΅ ΡΠ΅ΠΏΠΎ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π²Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π² Π²ΠΈΠ΄Ρ: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΎΠ²Π΅Ρ, Π΅ΡΠ»ΠΈ ΡΡΠΎΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΡΠΆΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΡΠΎ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΠΏΡΠ°Π²Π΄Π°, Π½ΠΎ ΡΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΠ»ΠΈ, Π³ΠΎΠ²ΠΎΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ Π²Π°Ρ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ CI ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ».
@gsemet Π·Π½Π°Π΅ΡΡ ΡΡΠΎ? ΠΡΠ΅ ΠΌΠΎΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ Python, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° Π³ΠΎΠ΄Π°, ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° pbr
- ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π΄ΠΎΡΠΎΠ²ΠΎ. Π Ρ ΡΠ»Π΅ΠΆΡ Π·Π° Π²Π°ΡΠΈΠΌΠΈ ΠΏΠΎΠΏΡΡΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°ΡΡ Pipfile Π² pbr Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ³Ρ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π³ΠΎΠ»ΠΎΡΠ° ΠΈ Ρ. Π.).
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ (ΠΏΠΎΠΈΡΠΊ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² pipenv
ΠΈ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python) Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» pbr
ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
pbr
ΠΏΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ (Π²Ρ ΠΈΡ
ΡΠΏΠΎΠΌΡΠ½ΡΠ»ΠΈ), ΠΈ ΡΡΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΡΠ²Π»Π΅ΡΠ΅Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΎΡΠ΅Π½Ρ ΠΆΠ΄Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅ΠΏΡΠ° Π΄Π»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ pbr. Π― ΠΏΡΠΎΡΠΈΡΠ°Ρ ΡΡΠΎ.
@ tsiq-oliverc Π²Ρ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² ΡΠΎΡΠΊΡ: ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΠ΅ΠΏΠΎ
ΠΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ±ΡΠ΄ΠΈΠ»Π° ΠΌΠ΅Π½Ρ Π½Π°ΡΠ°ΡΡ ΡΡΠΎΡ Π²ΡΠΏΡΡΠΊ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ°Π΅ΡΠ΅ Π½Π°ΡΠ°Π»ΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Pipfile.lock
ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΈΡΡ Π²Π°ΡΠΈ ΡΠ΅ΡΡΡ CI (Π»ΠΈΠ±ΠΎ Π½Π°ΡΡΡΠΈΡΡ Π·Π°ΠΏΡΡΠΊ ΡΠ±ΠΎΡΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΡΠΊΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ»ΠΈ Π±Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Ρ, Π»ΠΈΠ±ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ...).
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΠ΅ ΠΌΠ½Π΅ ΡΠ΅ΠΏΠΎ, Π³Π΄Π΅ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ (ΠΎΠ±ΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python), Ρ Π±ΡΠ΄Ρ ΡΡΠ°ΡΡΠ»ΠΈΠ². ΠΠ»ΠΈ Ρ Π±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π», ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡΡ ΡΠΈΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½ΠΎ.
ΠΡΠΎΡ Π»Π°Π΄Π½ΡΠΉ ! Π― ΡΠΎΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΡΡΠΎΡ ΡΠ΅Π·Π°ΠΊ :)
@vlcinsky Π₯ΠΎΡΠΎΡΠΎ , Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ Π½Π°ΠΉΠ΄Π΅ΠΌ Π΄Π»Ρ Π½ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ π (Ρ Π½Π΅ Π·Π½Π°Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π²ΡΡΠΎΠΊΠΎΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Pipenv, Π½ΠΎ ΡΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Ρ Π½Π΅ ΡΠΌΠΎΡΡΠ΅Π».)
ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΌΠΎΠ³Ρ ΡΡΠ΄ΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠΈΠΌΠΏΡΠΎΠΌΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΅:
pipenv install -e .
, Π²Π΅ΡΠ½ΠΎ?@ tsiq-oliverc ΠΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΡ, Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π²Π΄ΠΎΡ Π½ΠΎΠ²ΠΈΠ»ΠΈ ΠΌΠ΅Π½Ρ, ΠΈ Ρ Π·Π½Π°Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠΌΡ ΡΡΠΎΠ²Π½Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ( Pipfile.lock
) Π² ΡΠ΅ΠΏΠΎ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΠΎΡΡΠΈ:
re Π‘ΠΊΡΡΡΠΈΠ΅ ΡΠ»ΠΎΠΌΠ°Π½Π½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ setup.py. . pipenv install -e .
ΡΠ»Π΅Π΄ΡΡΡ ΡΠΎΠΌΡ, ΡΡΠΎ Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ, Π½ΠΎ ΡΡΡΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Pipfile.lock
, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π΅Π³ΠΎ (ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ) ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ Pipenv.lock
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ virtualenv ΠΏΠ΅ΡΠ΅Π΄ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ.
re ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
Π²Π΅ΡΡΠΈΠΉ python ΠΈΠ»ΠΈ Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΠ‘ . ΠΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ: doit
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π΄Π»Ρ Python 2.7, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΎΡΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΎΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Python 2.x. ΠΠ»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ watchdog
ΡΡΠ΅Π±ΡΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π·Π°Π²ΠΈΡΡΡΠΈΠ΅ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ: inotify Π² Linux, ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅ Π² Windows, ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅ Π² OSX. ΠΠΎΠΉ Π±ΡΠ²ΡΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ»: Β«ΠΡΠΎΠ³ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ»ΡΡΠΈΡΡΡΒ», ΠΈ Π² 50% ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ»ΠΎ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 2 Π½Π΅Π΄Π΅Π»Ρ. ΠΡΠΎ Π½Π΅ Π»ΡΡΡΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π΄Π»Ρ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² CI.
re Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ .. ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π±Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Ρ 15 ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°ΠΌΠΈ. Π’Π°ΠΊ Π»Π΅Π³ΠΊΠΎ Π·Π°Π±ΡΡΡ ΠΎ ΡΠ΅Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Pipfile.lock
Π½ΠΎΠ²ΠΈΡΠΊΠΎΠΌ ΠΈΠ»ΠΈ ΡΡΡΠ°Π²ΡΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΡΠ΄ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ maya
ΠΌΠ΅Π½Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Pipfile.lock
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² setup.py
Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ββΠ½ΠΎΠ²Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ. ΠΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ? ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»? ΠΠ±Π½ΠΎΠ²ΠΈΠ» Π»ΠΈ Ρ Π΅Π³ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ? ΠΡΠ²Π΅ΡΡ Π½Π΅Ρ, Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, Π½Π΅Ρ. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΎΠ½ΠΎ Π²Π΄ΠΎΡ
Π½ΠΎΠ²ΠΈΠ»ΠΎ ΠΌΠ΅Π½Ρ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΡΠ΄ΠΎΠΌ Ρ Π²Π°ΡΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΌ).
ΠΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ Ρ tox : Tox ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ² Π² Π½ΠΈΡ
. Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ tox.ini
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ python 2.7, 3.4, 3.5, 3.6 ΠΈ Π»ΡΠ±ΡΡ
Π΄ΡΡΠ³ΠΈΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΌ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΡΠΎΠ². Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ powertool ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ
ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ². pipenv
Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
Π²Π΅ΡΠ΅ΠΉ. Π Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Π» Π²Π°ΡΠ΅ΠΌΡ ΡΠΎΠ²Π΅ΡΡ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ (tox) Π²ΠΌΠ΅ΡΡΠΎ pipenv
Π³Π΄Π΅ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
re Pipenv ΡΠ΅ΡΠΏΠΈΡ Π½Π΅ΡΠ΄Π°ΡΡ. ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΡΠΊΠΎΡΠ±Π½ΠΎ. Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ» ΡΠ΅ΡΡ CI (Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ tox), ΠΊΠΎΡΠΎΡΡΠΉ Ρ
ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π» Π½Π° localhost, Π½ΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΠ΅Π· Travis ΠΎΠ½ Π½Π΅ ΡΠ΄Π°Π»ΡΡ ΠΈΠ·-Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ pipenv
. ΠΡΠ»ΠΈ Ρ Ρ
ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ΅ΠΉΡΠ°Ρ, Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΡΡΠ΅Π½ΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΠΎ ΡΠ°ΠΊ ΠΎΠ½ΠΎ ΠΈ Π΅ΡΡΡ - ΠΏΠΎΠ΄ΠΎΠΆΠ΄Ρ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ pipenv
Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ
CI ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠ΅ ΠΎΠΏΡΠ°Π²Π΄Π°Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ("Π·Π°ΠΏΠ΅ΡΠ°ΡΡΠ²Π°Π½ΠΈΠ΅" ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ virtualenv Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ).
@ tsiq-oliverc Π₯ΠΎΡΡ ΠΌΠ½Π΅ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ Π²Π°ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΊ Β«Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Ρ ΠΎΡΠΎΡΠΈΡ Β», ΡΠ°ΠΊ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΉ, ΠΌΠ½Π΅ Π²ΡΠ΅ ΡΡΡΠ΄Π½Π΅Π΅ ΠΈ ΡΡΡΠ΄Π½Π΅Π΅ ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°ΡΡ ΡΡΠΈΠ»ΠΈΡ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Ρ Π΄ΡΠΌΠ°Ρ ΠΎΠ± ΡΡΠΎΠΌ. Π― Π΄ΡΠΌΠ°Ρ, Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅ΡΠΈΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½ΠΎ, Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠ΅, Π° Π½Π΅ ΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅, - ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Ρ ΡΡΠ°Π·Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, Π±ΡΠ» Π»ΠΈ ΡΠ±ΠΎΠΉ Π²ΡΠ·Π²Π°Π½ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°. ΠΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅, ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»Π°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ (ΠΏΡΠΈ ΡΡΡΠ½ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ) ΠΈΠ»ΠΈ ΠΏΡΡΠ°ΡΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΎΠΉ (ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ). Π Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄Π°Ρ Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ "ΠΏΡΠΎΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ" ...
@vlcinsky Π₯ΠΎΡΡ Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ Π²Π°ΡΠΈΠΌ ΠΎΠ±ΡΠΈΠΌ ΠΌΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π΄Π°ΠΌΠΈ, Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Β«ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΒ» Π·Π²ΡΡΠΈΡ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΠΊΠ°ΠΊ ΡΠΎΠ»ΠΎΠΌΠΈΠ½ΠΊΠ°. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠ΅Π΄Π°ΠΌΠΈ.
ΠΠ΄ΠΈΠ½ ΠΎΡΡΠ°Π²ΡΠΈΠΉΡΡ ΠΎΡΠΊΡΡΡΡΠΉ Π²ΠΎΠΏΡΠΎΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΠ΅ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΎΡΠ²Π΅ΡΠΈΠ», - ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ ΡΠΎ ΡΠ»ΡΡΠ°Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΎΠ±ΠΎΠΈΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ°Π·Π½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ·Π½Π°ΡΡ, ΡΡΠΎ Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Ρ ΠΎ tox
ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π½ΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΊΠ»Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ tox
ΠΈ pipenv
ΡΡΠΎ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ΅ΡΠ°Π΅Ρ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
@ Moritz90
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Pipfile.lock
Π²ΡΡΡΡΠΏΠ°ΡΡΠΈΡ
Π² ΡΠΎΠ»ΠΈ ΡΠΎΠ»ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° (ΡΡΠΎΠ±Ρ Π½Π΅ Π΄ΠΎΠΏΡΡΡΠΈΡΡ Π΄ΡΡΠ³ΠΈΡ
ΠΊ ΠΌΠΎΠ΅ΠΌΡ ΠΏΠΎΠ»Ρ):
Π― Π²Π·ΡΠ» ΠΏΡΠΎΠ΅ΠΊΡ flask
(ΡΡΠΈΡΠ°Ρ Π΅Π³ΠΎ ΠΎΡΠ΅Π½Ρ Π·ΡΠ΅Π»ΡΠΌ) ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ» tox-ΡΠ΅ΡΡΡ:
ΠΠ΄Π΅ΡΡ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² (ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π² Linux, ΡΠΌΠ½ΠΎΠΆΡΡΠ΅ Π΅Π³ΠΎ Π½Π° 3, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Windows ΠΈ OSX Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΡΠΎΠ², Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠ°Π·Π½ΡΠΌ ΡΡΠ΅Π΄Π°ΠΌ).
ΠΠ° ΠΎΠ΄Π½ΠΎΠΉ ΠΠ‘ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ 16 ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΠΎΠ½ΠΎΠ², 5 ΠΈΠ· Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ ΠΌΠ΅Π½Ρ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ (ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ), ΠΎΠ΄ΠΈΠ½ ΡΠ²ΡΠ·Π°Π½ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°), Π° Π΄ΡΡΠ³ΠΎΠΉ - Ρ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ΠΌ (ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ):
coverage-report: commands succeeded
docs-html: commands succeeded
py27-devel: commands succeeded
py27-lowest: commands succeeded
py27-simplejson: commands succeeded
py27: commands succeeded
py35: commands succeeded
py36-devel: commands succeeded
py36-lowest: commands succeeded
py36-simplejson: commands succeeded
py36: commands succeeded
ERROR: py34: InterpreterNotFound: python3.4
ERROR: pypy-devel: InterpreterNotFound: pypy
ERROR: pypy-lowest: InterpreterNotFound: pypy
ERROR: pypy-simplejson: InterpreterNotFound: pypy
ERROR: pypy: InterpreterNotFound: pypy
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ
Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΡΠΎΠ·Π΄Π°Π» requirements.txt
ΡΠ°ΠΉΠ» pip freeze > {venv_name}.txt
ΠΠ°ΡΠ΅ΠΌ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Ρ Π΅ΡΠΈ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎ Ρ Π΅Ρ-Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ, ΡΠ°ΠΊ ΡΡΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Ρ. Π Π²ΠΎΡ ΠΈ ΡΠΎΠ»ΠΎΠΌΠΈΠ½ΠΊΠ°:
b231a4cc8f30e3fd1ca0bfb0397c4918f5ab5ec3e56575c15920809705eb815e py35.txt
b231a4cc8f30e3fd1ca0bfb0397c4918f5ab5ec3e56575c15920809705eb815e py36.txt
cdf69aa2a87ffd0291ea65265a7714cc8c417805d613701af7b22c8ff2b5c0e4 py27-devel.txt
dfe27df6451f10a825f4a82dfe5bd58bd91c7e515240e1b102ffe46b4c358cdf py36-simplejson.txt
e48cd24ea944fc9d8472d989ef0094bf42eb55cc28d7b59ee00ddcbee66ea69f py36-lowest.txt
f8c745d16a20390873d146ccb50cf5689deb01aad6d157b77be203b407e6195d py36-devel.txt
053e107ac856bc8845a1c8095aff6737dfb5d7718b081432f7a67f2125dc87ef docs-html.txt
45b90aa0885182b883b16cb61091f754b2d889036c94eae0f49953aa6435ece5 py27-simplejson.txt
48bd0f6e66a6374a56b9c306e1c14217d224f9d42490328076993ebf490d61b5 coverage-report.txt
564580dad87c793c207a7cc6692554133e21a65fd4dd6fc964e5f819f9ab249c py27.txt
8b8ff4633af0897652630903ba7155feee543a823e09ced63a14959b653a7340 py27-lowest.txt
Π‘ΡΡΠ°ΡΠ½ΠΎ, ΠΏΡΠ°Π²Π΄Π°? ΠΠ· Π²ΡΠ΅Ρ ΡΠ΅ΡΡΠΎΠ² ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python Ρ Ρ ΠΎΡΠΎΡΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠ΅ΡΡΠΎΠ². Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΡΠΈΠ·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π½Π΅ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ python, ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° jinja2
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ Π·Π²Π΅ΡΡΠ³ΠΈ:
coverage-report: commands succeeded
py26: commands succeeded
py27: commands succeeded
py33: commands succeeded
py35: commands succeeded
py36: commands succeeded
ERROR: docs-html: commands failed
ERROR: py34: InterpreterNotFound: python3.4
ERROR: pypy: InterpreterNotFound: pypy
ΠΠ»ΡΠ΄Ρ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΠΌΠΌΡ, Ρ ΡΠ΄ΠΈΠ²Π»ΡΡΡΡ, ΡΡΠΎ py27.txt ΠΈ py26.txt ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ:
047a880804009107999888a3198f319e5bbba2fa461b74cfdfdc81384499864e py26.txt
047a880804009107999888a3198f319e5bbba2fa461b74cfdfdc81384499864e py33.txt
047a880804009107999888a3198f319e5bbba2fa461b74cfdfdc81384499864e py35.txt
047a880804009107999888a3198f319e5bbba2fa461b74cfdfdc81384499864e py36.txt
48bd0f6e66a6374a56b9c306e1c14217d224f9d42490328076993ebf490d61b5 coverage-report.txt
743ad9e4b59d19e97284e9a5be7839e39e5c46f0b9653c39ef8ca89c7b0bc417 py27.txt
@vlcinsky ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ°ΡΠ½ΠΎ. ΠΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Flask ΠΎΡΠΎΠ±ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ»ΠΈ ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½ΠΎΡΠΌΠ°, Π½ΠΎ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ Ρ ΠΎΡΠΈΠ±Π°ΡΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π΅ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΈ ΡΡΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π±ΡΠ΄ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌΠΈ.
@ Moritz90 ΠΠ°ΡΠ° Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΡΡ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠ΅Π±Π΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ·ΠΊΠΈΠΌ.
ΠΠ±ΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ python ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°ΡΡ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Flask ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΏΠ°ΡΡΠ΅ΡΡ json, ΡΡΠΎ ΠΏΠΎΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠΌ Π·Π°ΠΏΡΡΠΊΠΎΠΌ.
ΠΠΎΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ tox ΠΈΠ· tox.ini
Flask.
ΡΠ°ΠΌΡΠ΅ Π½ΠΈΠ·ΠΊΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
devel ΡΠ΅ΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
Π― Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ Flask Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΡΠΎΠ².
tox.ini ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΄ (ΠΎΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΡΠ΅Π»Π΅Π½Ρ Π½Π° 100% ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Π°).
tox.ini ΠΌΠ°ΠΉΡ ΠΎΡΠ΅Π½Ρ ΡΠ²Π΅ΠΆΠΈΠΉ (2 Π΄Π½Ρ) ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ, Π΄Π°ΠΆΠ΅ Π·Π΄Π΅ΡΡ 4 ΡΠ°Π·Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΈ py27 ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎ Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½Π½ΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΎΡ py35 ΠΈ py36.
@ Moritz90
ΠΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΊΠ»Π΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΈΠΏΠ΅Π½Π² ΠΈ ΡΠΎΠΊΡ
pipenv --man
ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pipenv
Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ
tox.ini
tox.ini
file ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π²ΠΊΠ»ΡΡΠ°Ρ pipenv
.
pipenv
ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ, Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π² ΡΠΆΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ virtualenv (ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ tox) ΠΎΠ½ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ env. ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π΄ΠΎΡΠΎΠ²ΠΎ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΠΌ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Pipfile.lock
, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π² Π½ΡΠΆΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ (ΠΎΡΠΌΠ΅ΡΡΡΠ΅ .tox/py36/Pipfile.lock
ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠ°. ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΡΠΊ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Pipfile
ΡΠ΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅.
@vlcinsky
pipenv install -e .
ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΡΠ°ΠΊ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ setup.py ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π²Π°Ρ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. Π Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ pipenv install
Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Π² setup.py.pipenv --deploy
ΠΏΡΠΈΠ·Π²Π°Π½ ΡΠ»ΠΎΠ²ΠΈΡΡ ΡΡΠΎ. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ CI!update-all-lockfiles.sh
Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ pipenv --deploy
Π½Π° ΡΠ²ΠΎΠ΅ΠΌ CI, ΡΡΠΎΠ±Ρ ΠΎΡΠ»ΠΎΠ²ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ.@ Moritz90 - Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½, Π΄Π²ΡΡ ΡΡΠ°ΠΏΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΠΌ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ / ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ Β«ΡΡΡΠ½ΡΠ΅Β» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π² ΡΡΠΎΠΌ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ»Π°Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΡΠΎ Β«ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅Β» ΡΠΎΠΊΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° Π²Π΅ΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ (Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΡΠΎ (A) ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ env, (B) ΠΆΠ΅Π»Π°Π΅Ρ ΡΠ»ΠΎΠ²ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°). ΠΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΏΡΠ΅Ρ ΠΎΠ΄ΡΡΠΈΡ Π²Π΅ΡΠ°Ρ (ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² Pipenv) ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ Π½Π΅Π΄ΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΡΡΠΈΡ Β«ΡΠ»ΠΎΠΆΠ½ΡΡ Β» ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΎΠ±ΡΠ°ΠΌΠ»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ Β«Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, ΡΡΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Pipenv Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ΅Π½, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΡΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡΒ». ΠΠΠ, Π΅Π³ΠΎ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π»ΡΠ΄Π΅ΠΉ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ).
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ @vlcinsky ΡΡΠ°Π» Π±Ρ ΠΏΡΠΎΡΠ΅ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ Π±Ρ Pipenv / Pipfile ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ» ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ lib-dependencies
, app-dependencies
ΠΈ dev-dependencies
. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ lib-dependencies
Π΅ΡΠ»ΠΈ Π²Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ. ΠΡΠΈΠΌΠ΅Ρ Pipfile
:
[lib-dependencies]
some-lib=="*"
another-lib=="*"
yet-another-one==">=1.0"
[dev-dependencies]
some-dev-tool=="1.1"
ΠΠ»Ρ ΠΎΠ±ΡΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ Π²Π΅ΡΡΠΈΠΉ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π»ΠΈ [lib-dependencies]
Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ Π²Π΅ΡΡΠΈΠΉ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅.
ΠΡΠ»ΠΈ Π²Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ΅ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ pipenv Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅), Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΡΡΡΡ ΡΠΎΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ [app-dependencies]
. ΠΡΠΈΠΌΠ΅Ρ Pipfile
:
[app-dependencies]
some-lib=="1.0.12"
another-lib=="1.*"
yet-another-one=="2.0"
[dev-dependencies]
some-dev-tool=="1.1"
/ ΠΠΎΠ½Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°
ΠΡΡΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Pipfile.lib
ΠΈ Pipfile.app
.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·Π±Π°Π²ΠΈΠ»ΠΎ Π±Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² Π±Π»ΠΎΠΊΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² Π°Π½ΡΠΈ-ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ , ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π΅Π».
ΠΡΠ·ΠΎΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ pipenv Π²Π²ΠΎΠ΄ΠΈΡ Π² Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python ΠΈΠ»ΠΈ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π°ΡΡΠΎΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π±ΠΎΠ»ΡΡΠΈΠΌ Π½Π΅Π΄ΠΎΡΠ°Π·ΡΠΌΠ΅Π½ΠΈΡΠΌ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΠ΅Π΄ΠΈ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΠΊ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°ΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, JS, Rust, Elm). ΠΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΡΠ΅Π² ΠΈ Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ GIthub, ΠΏΠΎΠΊΠ° Ρ Π½Π΅ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Pipenv ΠΈ setup.py.
@feluxe
ΠΠ°ΡΠΈ [lib-dependencies]
ΠΈΠ»ΠΈ Pipfile.lib
- ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π² Pipfile
(ΠΊΠ°ΠΊ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ - ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΈΡΠΎΠΊΠΈΠ΅).
ΠΠ°ΡΠΈ [app-dependencies]
ΠΈΠ»ΠΈ Pipfile.app
- ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π² Pipfile.lock
(Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ).
pipenv
ΠΈ Π΅Π³ΠΎ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π΄Π²ΡΡ
ΡΠ°Π·Π½ΡΡ
ΡΠΈΡΡΠ°ΡΠΈΡΡ
- ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ
ΡΡΠ°Π·Ρ. ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ Ρ Π½Π΅ Π²ΠΈΠΆΡ Π²Π΅ΡΠΊΠΈΡ
ΠΏΡΠΈΡΠΈΠ½ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² Π² Pipenv
. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΎΠ±ΡΠ·Π°Π½Ρ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅Π»ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ»ΡΠΆΠΈΡΡ Pipfile
.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π°ΡΡΠΎΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π±ΠΎΠ»ΡΡΠΈΠΌ Π½Π΅Π΄ΠΎΡΠ°Π·ΡΠΌΠ΅Π½ΠΈΡΠΌ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΠ΅Π΄ΠΈ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΠΊ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°ΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, JS, Rust, Elm). ΠΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΡΠ΅Π² ΠΈ Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ GIthub, ΠΏΠΎΠΊΠ° Ρ Π½Π΅ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Pipenv ΠΈ setup.py.
Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΎ. Π’ΡΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΡΠΎΠΆΠ΅ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π», ΠΈ ΠΎΠ½ΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΈ (Π½Π° ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅!) ΠΡΠΎΡΡΡΠΌ.
ΠΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΎΠΏΡΡΠ° ΡΠ°Π±ΠΎΡΡ Ρ Python, Ρ Π²ΡΠ΅Π³Π΄Π° ΡΡΠ²ΡΡΠ²ΠΎΠ²Π°Π», ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ Node package.json Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ (Rust Π»ΡΡΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ, ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΌ ΡΡΠ°ΠΏΠ΅). ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Python, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π² Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΌ ΡΠΌΡΡΠ»Π΅ - ΡΠΎ Π΅ΡΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ Π²Π°Ρ, Π½ΠΎ ΠΎΠ±ΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Pipenv, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ±ΡΠΈΠΉ.
Π₯ΠΎΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΡΡΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ setup.py, setup.cfg ΠΈ (ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ) pyproject.toml. ΠΡΠ»ΠΈ Pipenv (Π° ΡΠΎΡΠ½Π΅Π΅, Pipfile) Ρ ΠΎΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ pip (Π² ΠΈΠ΄Π΅Π°Π»Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠΌ) ΠΈ flit .
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» Π² Π΄ΡΡΠ³ΠΈΡ Π²ΠΎΠΏΡΠΎΡΠ°Ρ , ΠΊΠ°ΡΠ°ΡΡΠΈΡ ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ lib / app, ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ²Π΅ΡΡΠΈ Π΄ΠΎ pypa-dev (ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΡΡΡΠ»ΠΊΠΈ) ΠΈ / ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° PEP, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΌΠΎΠ³Π»ΠΈ Π»ΡΡΡΠ΅ ΡΡΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠΎΡΠΎΠ½Ρ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π»ΠΈΡΠ°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Pipenv (Pipfile) ΠΌΠΎΠΆΠ΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π² Π»ΡΠ±ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ .
@vlcinsky
ΠΠ°ΡΠΈ [lib-dependencies] ΠΈΠ»ΠΈ Pipfile.lib - ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π² Pipfile (ΠΊΠ°ΠΊ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ - ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΈΡΠΎΠΊΠΈΠ΅).
ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠΎΠΈ lib-dependencies
ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π»ΡΠ΄ΠΈ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π² setup.py
/ install_requires
. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, pypi-dependencies
Π±ΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρ.
@uranusjr
ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ setup.py, setup.cfg ΠΈ (ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ) pyproject.toml.
Pipenv (ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ) ΠΌΠΎΠΆΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ setup.py
. ΠΡΠΎΡΡΠΎ ΡΠ°Π·Π΄Π΅Π» Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ setup.py
Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π² Pipfile. ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π² ΠΌΠΎΠ΅ΠΌ Π²ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ :)
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» Π² Π΄ΡΡΠ³ΠΈΡ Π²ΠΎΠΏΡΠΎΡΠ°Ρ , ΠΊΠ°ΡΠ°ΡΡΠΈΡ ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ lib / app, ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ²Π΅ΡΡΠΈ Π΄ΠΎ pypa-dev (ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΡΡΡΠ»ΠΊΠΈ) ΠΈ / ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° PEP, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΌΠΎΠ³Π»ΠΈ Π»ΡΡΡΠ΅ ΡΡΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠΎΡΠΎΠ½Ρ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π»ΠΈΡΠ°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Pipenv (Pipfile) ΠΌΠΎΠΆΠ΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π² Π»ΡΠ±ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ .
Π₯ΠΎΡΠΎΡΠΎ, ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΎ;) ΠΡΠ»ΠΈ Ρ Π½Π°ΠΉΠ΄Ρ Π²ΡΠ΅ΠΌΡ, Ρ Π½Π°ΠΏΠΈΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄Π»Ρ ΡΠ°ΡΡΡΠ»ΠΊΠΈ.
ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π±Ρ ΠΏΠΎΡΠΎΠ²Π΅ΡΠΎΠ²Π°Π» ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ , Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΠΊΡΠΎΠ»ΠΈΡΡΡ Π½ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Python. ΠΡΠ»ΠΎ Π±Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π»ΡΡΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅ΠΊΡΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ.
@uranusjr - Π―
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², ΠΊΠ°ΠΊ Python.
@ tsiq-oliverc ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π»ΡΡΡΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π²Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»ΡΠ»ΠΈ ΡΠ²ΠΎΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΡΠ½ΡΡ Π·Π°ΠΊΡΠ΅ΠΏΠ»ΡΡΡ ΡΠ²ΠΎΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π»ΠΎ Π±Ρ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ A ΠΈ B, ΠΎΠ±Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ C, Π½ΠΎ A Π²ΡΠ²ΠΎΠ΄ΠΈΡ v1, Π° B Π²ΡΠ²ΠΎΠ΄ΠΈΡ v2. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΡΠ΅ΡΠ°ΡΡ Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. Rust, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ - ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ C (v1 ΠΈ v2), ΠΏΡΠΈΡΠ΅ΠΌ A ΠΈ B ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ . Π ΠΌΠΈΡΠ΅ C ++ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ; ΠΏΠΎΠΈΡΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ·ΠΆΠ΅ (Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ), Π½ΠΎ ΠΈΠ΄Π΅Ρ ΡΠ° ΠΆΠ΅ - ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π΅Ρ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ (ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅), ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
Π―Π·ΡΠΊΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π·Π½Π°ΡΡ, ΡΡΠΎ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠΉΠ΄ΡΡ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π°. Node ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄ ΡΡΠΈΠΌ, Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ (A ΠΈ B Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ C, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ), Π½ΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΡΠΌ Π²Π·Π»ΠΎΠΌΠ°ΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ΅ (ΠΠ°Π΄Π΅ΡΡΡ?) Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ ΡΠΆΠ°ΡΠ½Ρ. Python, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ Ρ ΠΎΡΠ΅Ρ ΡΡΠ΄Π° ΠΈΠ΄ΡΠΈ (Π²ΠΎ Π²ΡΡΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π°ΡΡΡΠΈΡ Π²ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Python).
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ - ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΌΠ½ΠΎΠ΅ Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Β«ΠΎΡΠΊΡΠ΅ΠΏΡΡΒ» Π²Π΅ΡΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Bundler (ΠΈΠ· Ruby) ΠΊΠ°ΠΊ Π±Ρ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π»ΡΠ΄ΡΠΌ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² Π³Π΅ΠΌ, ΡΡΠΎΠ±Ρ Bundler ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π² Gemfile Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ Π² Gemfile.lock. ΠΠΎ Π»ΡΠ΄ΠΈ ΡΠΊΠ»ΠΎΠ½Π½Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ²Π΅ΡΡ ΠΈ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ΅, ΡΡΠΎ Ρ ΠΎΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ²ΡΡΠ΄Ρ.
Π―, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π±ΡΠ» ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΈΠ»Π΅Π½, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ . ΠΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΡΠΎΠ²Π°Π»ΠΈΠ»ΠΈΡΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΠ΅Ρ , ΠΊΡΠΎ ΠΏΡΡΠ°Π»ΡΡ, - ΠΎΡΠ΅Π½Ρ ΡΠΌΠ½ΡΠ΅ Π»ΡΠ΄ΠΈ, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΌΠ½Π΅Π΅ ΠΌΠ΅Π½Ρ. ΠΠΈΡΠ½ΠΎ Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΈ Ρ Π±ΡΠ΄Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π΄ΡΠΌΠ°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ²ΠΈΠΆΡ ΠΎΡΠ΅Π½Ρ Π±Π»Π΅ΡΡΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ.
@ tsiq-oliverc ΠΠΈΡΠ΅Ρ Π₯ΠΈΠ½ΡΡΠ΅Π½Ρ Π³Π΄Π΅-ΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π» ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Β«ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π² ΡΠΎΡΠΌΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡΒ».
ΠΠ½Π΅ ΡΡΠΎ Π½ΡΠ°Π²ΠΈΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΎΠΊΡΡ Ρ ΡΠΈΠ»ΠΎΡΠΎΡΡΠΊΠΈΡ ΡΠΎΠ²Π΅ΡΠΎΠ² Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΡΠ·Π°Π΅ΠΌΡΠ΅ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²Π΅ΡΠΈ. Π ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΎΡ ΡΠ°ΡΡΠΎ ΡΠ·Π½Π°Π΅Ρ Π½Π° ΠΏΡΡΠΈ, ΡΡΠΎ ΠΈΠ΄Π΅Ρ Π½Π΅ΠΏΠΎΠ»Π½Π° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ-ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
Π― ΠΏΠΎΠΏΡΠΎΡΠΈΠ» Π²Π°Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ python, Π³Π΄Π΅ pipenv
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ (ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ), Π° Π²Ρ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π΅Π³ΠΎ.
ΠΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΡΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° tox
Π½ΠΎ ΠΏΡΠΈΠ·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π½ΠΈΠΌΠΈ, Π²ΡΠ΅ ΠΆΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΡ ΡΡΠΎ-ΡΠΎ ΠΎ Π»ΡΡΡΠΈΡ
ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°Ρ
Π² ΠΌΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Python.
ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ Flask
- ΡΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡΠΎΠ±ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ. ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠΎΠΈΡΠΊΠ°Π» Π² Github ΠΏΡΠΎΠ΅ΠΊΡΡ python, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»ΠΎΠ²ΠΎ Β«Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Β», ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π²ΠΈΠ»ΠΎΠΊ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΡΠ΄Π΅ΠΉ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Ρ Π΅Π΅ ΠΏΠΎΠΌΠΎΡΡΡ), ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π» Π²Π΅ΡΡ Β«ΠΏΡΠΎΠΊΡΡΡΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π³ΠΎ-ΡΠΎΒ» ΠΈ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°Π» ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΄ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΠ‘ (ΠΎΠ±ΡΡΠ½ΠΎ Linux):
Π Π΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΄ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π² 2 (+ Windows) ΠΈΠ»ΠΈ 3 (+ OSX) ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅.
tox
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² 2 ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
ΠΈΠ· 3 (Ρ Π½Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ Π΅Π³ΠΎ Ρ Travis ΠΈΠ»ΠΈ Appveyor, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ).
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΄ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π²Π΅Π»ΠΈΠΊΠΎ, Flask ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΡΠ°ΠΌΡΠΉ Π΄ΠΈΠΊΠΈΠΉ.
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΄, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²ΡΡΡΠ½ΡΡ.
ΠΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΡ Pipfile.lock
Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΎΠ³ΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ (Π΅ΡΠ»ΠΈ Π΄Π°, ΠΏΠΎΠΊΠ°ΠΆΠΈΡΠ΅ ΠΌΠ½Π΅ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΡΠ»ΡΡΡΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡ).
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π²Ρ Π·Π½Π°Π΅ΡΠ΅ Π·ΠΎΠ»ΠΎΡΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΠ· Β«ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎΒ» ΠΌΠΈΡΠ° ΠΈ ΡΡΠ²ΡΡΠ²ΡΠ΅ΡΠ΅, ΡΡΠΎ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌ (ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΠΎΡΡΡ) Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈ Π΄Π»Ρ Python. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ Python Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΆΠΈΠ²ΡΡ Π±Π΅Π· Π½Π΅Π³ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·ΠΎΠ»ΠΎΡΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π΄Π΅ΡΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊ ΡΡΡΠΎΠ³ΠΎ.
ΠΡΠ΄Ρ ΡΠ°Π΄, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ pipenv
Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python, ΡΡΠΎ ΡΠ»ΡΡΡΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡ. Π Ρ Ρ
ΠΎΡΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Ρ.
ΠΠ»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ Ρ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Ρ Π²ΠΎΠΏΡΠΎΡΡ:
@feluxe
ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠΎΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ lib ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π»ΡΠ΄ΠΈ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² setup.py / install_requires. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, pypi-dependencies Π±ΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρ.
Π‘ΠΌ. ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ pbr
Π² ΡΡΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅. ΠΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Pipfile.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ Pipfile
Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΄Π²ΡΡ
ΡΠ΅Π»Π΅ΠΉ (lib ΠΈ app), ΡΡΠΈ Π²Π΅ΡΠΈ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ ΡΡΠ²ΡΡΠ²ΡΠ΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ? ΠΠ±ΡΡΠ½ΠΎ Ρ ΡΡΠ°ΡΠ°ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
@vlcinsky Π― Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ΅Π½, Π³Π΄Π΅ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΠΎ Π²Π·ΡΡΡ (Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΈΠ°Ρ Π²Ρ ΠΏΡΠΎΡΠΈΡΠ΅!), ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Ρ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ΅.
Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ TL; DR ΠΌΠΎΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ:
@uranusjr ΠΠΎΠ½ΡΡΠ½ΠΎ . Π₯ΠΎΡΡ Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π»Ρ ΡΠ·ΡΠΊΠ°, ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° Π²ΡΠ±ΡΠ°Π»ΠΈ ΡΠ°Π·Π½ΡΠ΅ ΡΠ²ΡΠΈΡΡΠΈΠΊΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π±Π΅Π· ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ - Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ Π²Π΅ΡΡΠΈΠΉ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Maven / Java (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ) Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°Ρ Π΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ. Π‘ΠΏΠΎΡΠΎΠ± NPM ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Python, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ) ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΡΠ±ΠΎΠΉ / ΠΈ Ρ. Π. Π΅ΡΠ»ΠΈ Π²Π΅ΡΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ.
@vlcinsky
Π‘ΠΌ. ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ pbr Π² ΡΡΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅. ΠΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Pipfile.
pbr ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΊΡΠ°ΡΠΈΠ²ΡΠΌ ΠΈ Π²ΡΠ΅ ΡΠ°ΠΊΠΎΠ΅, Π½ΠΎ ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΡΡΠ°Π»ΡΡ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ:
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·Π±Π°Π²ΠΈΠ»ΠΎ Π±Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² Π±Π»ΠΎΠΊΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² Π°Π½ΡΠΈ-ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ , ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π΅Π».
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π² ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠ»ΠΈ Π²Ρ ΡΡΠ²ΡΡΠ²ΡΠ΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ? ΠΠ±ΡΡΠ½ΠΎ Ρ ΡΡΠ°ΡΠ°ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ
ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² pypi, Ρ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Pipenv Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ dev, Pipfile
Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ dev, setup.py
Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ lib Ρ ΠΏΠΎΠΌΠΎΡΡΡ install_requires
ΠΈ setuptools
Π² setup.py
ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΌΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ Ρ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΌ pipenv run python setup.py bdist_wheel upload
. ΠΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ ΡΡΠΈΡΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΡΠΌ.
ΠΠ° Π΄ΡΡΠ³ΠΈΡ
ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²) ΠΏΠ»ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, ΠΈ Π΅Π΅ Π»Π΅Π³ΡΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ, Π° Π½ΠΎΠ²ΠΈΡΠΎΠΊ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ Π·Π° ΠΏΠ°ΡΡ ΡΠ°ΡΠΎΠ². Π Π΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ npm init
, npm install foo --dev
, npm publish
. Pipenv / Pipfile ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ ΠΌΠΎΠ³ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ΅, ΡΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠ°, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ Π±Ρ.
Π― ΠΏΠΎΠ²ΡΠΎΡΡΡ ΡΠ²ΠΎΠΉ ΠΏΡΠΈΠ·ΡΠ² ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° "ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°" / Π²ΠΈΠΊΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ. ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ "ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²", ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΊΠΎΠ½Π½ΡΠΌΠΈ, ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½Π°Ρ ΠΌΠΎΠ³ΡΡ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΈΠΌ "ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python", Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅, ΠΊΠ°ΠΊ Ρ, Ρ pbr, Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½. ΠΠΎ ΡΡΡΠ°Π½ΠΈΡΠ° Π²Π½ΡΡΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° pipenv, Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ.
PS: ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π½Π° Π½ΠΎΠ²ΡΠΉ pypi, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ°Π³Π°Ρ, Π° Π½Π΅ Π·Π°Π³ΡΡΠ·ΠΊΡ python setup.py. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Β«Π·Π°Π³ΡΡΠ·ΠΊΠΈΒ» ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½.
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, pipenv ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ°ΡΡΠΈΡΡ Β«ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡΒ» ΠΊΠΎΠΌΠ°Π½Π΄Ρ?
@feluxe ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΡΡΠΈΡ ΠΈ . Π― ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΡΠΊΠ°ΡΡΡ Π½Π° ΡΡΠΎ ΠΈ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΈΡΠ΅ΡΠ΅.
ΠΠ½ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ pipenv
, ΠΈ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»ΡΡΠ΅, ΠΈ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π»ΡΡΡΠ΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΎΠ½ΠΈ ΡΠ°ΠΊ ΠΏΡΠΈΡΠ²ΠΎΡΡΡΡΡΡ). ΠΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ, ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ Π²ΡΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ΅ poetry
.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠΌΠΎΠ³ΡΡ Π»ΠΈ pipenv
ΠΈ poetry
ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΡ ΡΡΠΈΠ»ΠΈΡ, ΡΡΠΎΠ±Ρ Π½Π°ΠΊΠΎΠ½Π΅Ρ Π΄Π°ΡΡ Python Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
Π― Ρ
ΠΎΡΡ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ Π΅ΡΠ΅ ΡΠ°Π·, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π°ΠΉΠ΄Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄Π°Π»Π΅ΠΊΠΎ. Pipenv Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠ°ΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ publish
ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ, ΡΡΠΎ ΠΏΡΡΠ°Π΅ΡΡΡ Π²Π·ΡΡΡ Π½Π° ΡΠ΅Π±Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ. ΠΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π° ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½Ρ, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΡ
Π²ΠΌΠ΅ΡΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΈΡ
ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
ΠΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ½Ρ Ρ ΡΡΠΈΠΌ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ΠΌ, Π½ΠΎ ΠΏΡΠ°Π²Π΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π»ΡΠ΄Π΅ΠΉ Π½Π΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π½ΠΈΡ ΡΡΠΎ-ΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅. Π― Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠ» ΠΎΠ± ΡΡΠΎΠΌ: ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π³Π΄Π΅-ΡΠΎ Π²ΡΡΠ΅ Π² ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Python, ΡΠ°ΠΊ ΡΡΠΎ Π»ΡΠ΄ΠΈ, ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ Π²Π΅ΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π΅ΡΡΡ Pipenv, ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠΎΠΉΠ΄ΠΈΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌ. ΠΠ΅Ρ ΡΠΌΡΡΠ»Π° ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΡΡΠΎ Π·Π΄Π΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Pipenv Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ.
Π― Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠ» ΠΎΠ± ΡΡΠΎΠΌ: ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π³Π΄Π΅-ΡΠΎ Π²ΡΡΠ΅ Π² ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Python, ΡΠ°ΠΊ ΡΡΠΎ Π»ΡΠ΄ΠΈ, ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ Π²Π΅ΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Pipenv, ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ.
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ·-ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ΅ΠΉΡΠ°Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ (ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ!), ΠΠΎ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΡΠΊΠ°Π·Π°ΡΡ Π½Π°ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ? ΠΡΠ΄ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΠΎ Π·Π΄Π΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ pipenv ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΡΠΎΠ»Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠ°Π³ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, Π° Π½Π΅ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Ρ ΠΎΡΡΡ Π²ΠΎΠ·Π»ΠΎΠΆΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ Π½Π° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΡ pipenv.
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ : ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Ρ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ, ΠΏΡΠΎΠΏΡΡΡΠΈΠ» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΡΠ°Π»ΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·.
ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π±Ρ ΠΏΠΎΡΠΎΠ²Π΅ΡΠΎΠ²Π°Π» ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ , Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΠΊΡΠΎΠ»ΠΈΡΡΡ Π½ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Python. ΠΡΠ»ΠΎ Π±Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π»ΡΡΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅ΠΊΡΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ.
Π― ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Ρ ΡΡΠΈΠΌ ΡΠΎΠ³Π»Π°ΡΠ΅Π½. ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΠ»Π°Π½Π°ΠΌ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠ² Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π»Ρ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ . ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ½ΠΎΠ²Π° ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° ΡΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠΎΠΉ Π±Π΅ΡΠ΅Π΄Ρ. ΠΠ΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΡ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ.
ΠΠ΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΠ΅ΠΌΠ΅: Π¦ΠΈΡΠ°ΡΠ° ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ @uranusjr ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ:
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ - ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΌΠ½ΠΎΠ΅ Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Β«ΠΎΡΠΊΡΠ΅ΠΏΡΡΒ» Π²Π΅ΡΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Bundler (ΠΈΠ· Ruby) ΠΊΠ°ΠΊ Π±Ρ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π»ΡΠ΄ΡΠΌ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² Π³Π΅ΠΌ, ΡΡΠΎΠ±Ρ Bundler ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π² Gemfile Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ Π² Gemfile.lock. ΠΠΎ Π»ΡΠ΄ΠΈ ΡΠΊΠ»ΠΎΠ½Π½Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ²Π΅ΡΡ ΠΈ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ΅, ΡΡΠΎ Ρ ΠΎΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ²ΡΡΠ΄Ρ.
Π―, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π±ΡΠ» ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΈΠ»Π΅Π½, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΠΎΡΠ΅ΡΠΏΠ΅Π»ΠΈ Π½Π΅ΡΠ΄Π°ΡΡ
Π― Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pipenv
Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ
ΡΠ±ΠΎΡΠΎΠΊ CI, Π½ΠΎ ΠΎΡΡΠ°Π²Π»ΡΡΡ Pipfile.lock
Π²Π½Π΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ, ΠΊΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΡΠ΄ΠΈ, pipenv
Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, ΠΌΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠΏΠΈΡΠ°Π»ΠΈ Π²ΡΡΠ΅.
Π Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠΈΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π°ΡΠΈΡ
Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ
Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ pipenv
Π½Π΅ Ρ
ΠΎΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Pipfile
Ρ setup.py
, Π½ΠΎ Ρ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Π² ΡΠ΅Π»ΠΎΠΌ ΡΡΠΎ ΠΏΠ»ΠΎΡ
Π°Ρ ΠΈΠ΄Π΅Ρ.
@vlcinsky
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ Pipfile Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΄Π²ΡΡ ΡΠ΅Π»Π΅ΠΉ (lib ΠΈ app), ΡΡΠΈ Π²Π΅ΡΠΈ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
Π‘ΠΌ. ΠΠΎΠΉ ΠΏΠΎΡΡ Π²ΡΡΠ΅. ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΡΡΠ½ΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π²Ρ ΡΠ°ΠΊ Π΄ΡΠΌΠ°Π΅ΡΠ΅? ΠΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π²ΠΈΠΆΡ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅. ΠΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ»ΠΎΡ
ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ Π²ΠΊΠ»ΡΡΠ°ΡΡ Pipfile
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π² Π΄Π²ΡΡ
ΡΠ°Π·Π½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
, Π½ΠΎ Ρ Π΅ΡΠ΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π» Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΎΠ±ΡΡΡΠ½ΡΡΡΠΈΡ
, ΠΏΠΎΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠ»ΠΎΡ
ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Pipfile
Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΡΠ΅Π»ΠΎΠΌ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ ΡΠΆΠ΅ ΡΠΎΠ³Π»Π°ΡΠΈΠ»ΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Pipfile.lock
Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ.
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ : ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΌΠΎΠΌΡ pipenv
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΎ ΡΠ°Π·Π½ΠΈΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π²Π²Π΅ΡΡΠΈ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΠΏΠΎΠ»Ρ Π³ΡΡΠ·Π° crate-type
ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΡΠΈΠ½Π°ΡΡ Π²Π²ΠΎΠ΄ΠΈΡΡ app-dependencies
ΠΈ lib-dependencies
- Π·Π²ΡΡΠΈΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎ.
@ Moritz90 ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠ°ΡΡΡΠ»ΠΊΠΈ Python Π±ΡΠ»ΠΈ Π±Ρ Ρ ΠΎΡΠΎΡΠΈΠΌΠΈ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ.
pypa-dev ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅
python-ideas - ΡΡΠΎ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΠΈΠ΄Π΅ΠΈ, ΠΈ ΠΎΠ½ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π²ΡΠ΅ΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ Python. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΠΎΡΠΏΡΠ°Π²Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ²Π΅ΡΡΠΈ ΡΡΠΎ Π΄ΠΎ ΡΡΠΎΠ²Π½Ρ PEP (Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Ρ Π΄ΡΠΌΠ°Ρ).
@ tsiq-oliverc
ΠΠΎΠ΄ PR Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ: ΠΏΠΎΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡΠΈΠΉ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ.
Π’Π°ΠΊ ΡΡΠΎ Π²ΠΎΠ·ΡΠΌΠΈΡΠ΅ ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΡΠ°Π·Π²Π΅ΡΠ²ΠΈΡΠ΅ Π΅Π΅, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ²ΠΎΡ (1) - Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ Ρ pipenv
ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π»Π΅Π³ΠΊΠΎ, ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠΈΡΠ΅ ΠΌΠ½Π΅. Π― ΠΎΡΠ΅Π½Ρ ΡΡΠ°ΡΠ°Π»ΡΡ, ΠΈ Ρ ΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ.
ΠΡΠ»ΠΈ Π²Π°Ρ (2) ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«ΠΊΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ ΡΡΡ ΡΠ°Π±ΠΎΡΡΒ», Π²Π°ΡΠ΅Π³ΠΎ PR Π½Π΅ Π±ΡΠ΄Π΅Ρ.
Π (3) Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ ΠΎ Β«Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π²Β», Π½Π΅ Π½Π°Π·ΡΠ²Π°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°. ΠΡΠ΅ Π»ΠΈ Π»ΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΠΏΠΈΡΠ°Π» Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΡΠΈΡΠ°ΡΡΡΡ Β«Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌΒ»?
Π§ΡΠΎΠ±Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ ΡΠΎΡΡΠ°Π²ΠΈΠ» ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΎ Π² Ρ ΠΎΠ΄Π΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ.
pipenv
(Π°Π½ΡΠΈ) ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ PythonΠ― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠΎΠΊΡΡ: ΠΎΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ (ΠΎΠ±ΡΠΈΡ ) Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ Python, Π½ΠΎ ΠΈ ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅Π³ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π΅ΡΠ΅Π²ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ, ΠΈ ΠΎΠ½ Ρ ΠΎΡΠΎΡΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡ.
Π― Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΠ» Π²ΡΠ΅, ΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ pipenv
, tox
ΠΈ Ρ. Π.
pipenv
Π° ΡΡΠΎ Π½Π΅ΡPipfile.lock
.ΠΡΠΎΠ΄ΡΠΊΡ (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Python) Π»ΠΈΠ±ΠΎ Π³ΠΎΡΠΎΠ² ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅), Π»ΠΈΠ±ΠΎ ΡΡΠΎ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π³ΠΎΡΠΎΠ²ΠΎΠ΅ ΠΊ Π·Π°ΠΏΡΡΠΊΡ.
ΠΠΈΡΠ½ΠΎ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Β«ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΒ» ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ).
pipenv install <package>
ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ "Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ (ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΉ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ)"pipenv sync
ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ "ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ"ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ: Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»ΡΡΡ Π²Π΅ΡΡΠΈΠΈ, Π² ΠΈΠ΄Π΅Π°Π»Π΅ Ρ Ρ Π΅ΡΠ°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
pipenv
Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ:Pipfile
: Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Pipfile.lock
: ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ (Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅) Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ "tox
ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΠ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡpipenv
ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Ρ
ΠΎΡΠΎΡΠΎ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ)Pipfile
Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈPipfile.lock
ΡΠΎΠ·Π΄Π°Π½ΠΎ pipenv install -e .
Pipfile.lock
Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ (Π·Π°ΠΏΠ΅ΡΠ°ΡΡΠ²Π°Π΅Ρ) ΡΡΠ΅Π΄Ρ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ virtualenv Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ.Π Π΅ΠΆΠΈΠΌ: Β«ΠΠ΅Π΄Π½ΠΈΠΊΠΎΠ²ΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄Β»
setup.py
install_requires
) ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° pypi, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Pipfile.lock
ΠΏΠΎΠΌΠΎΡΡΡ pipenv install -e .
pipenv sync Pipfile.lock
Pipfile.lock
Π²ΡΡΡΠ½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ (ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ)
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌ (Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π² Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ)
ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ pypi (Π½ΠΈΠ·ΠΊΠΈΠΉ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌ, ΠΏΠ°ΠΊΠ΅ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ)
Pipfile.lock
): ΠΏΠΎΠ»Π½ΡΠΉ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌPipfile.lock
:ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° pbr
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ΅ΡΠ΅Π· requirements.txt
. ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π½ΠΈΡ Pipfile
ΡΠΆΠ΅ Π² ΠΏΡΡΠΈ.
poetry
package ΠΏΡΡΠ°Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅Π΅ Π½Π° pyenv
Β«ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΠ΅ΠΏΠΎΒ», ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ:
Pipfile.lock
. Π‘Π΅ΡΡΠ΅Π·Π½ΠΎ: flask
ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° 11 ΡΠ°Π·Π½ΡΡ
Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
(Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΠ‘) 10 ΡΠ°Π·Π½ΡΡ
Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡ
ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ?Pipfile.lock
(Π½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ CI), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ virtualenv Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅.Pipfile.lock
Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈsetup.py
.Pipfile
Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈsetup.py
), ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΡΡΡΡ ΡΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ setup.py
.Pipfile
ΠΏΠΎΠΌΠΎΡΡΡ pipenv install -e .
ΠΈΠ»ΠΈ pipenv install -e .[tests]
Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½Ρ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΈ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ "ΡΠ΅ΡΡΡ" Π² setup.py
pipenv install <something>
Π² ΡΠΊΡΠΈΠΏΡΡ CIpipenv
).ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΎΠ±ΡΠΈΠ΅) Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅Π»ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ . ΠΠΈΠ±ΠΊΠΎΡΡΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ. ΠΠ»Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΡ ΠΈΠ· ΠΌΠΈΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ ΠΈΠΌ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠ΅) Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ (Π΅ΡΠ»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ , Π΄Π°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ), ΠΈ Python ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ. ΠΡΠΈΡΠΈΠ½Ρ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Python ΠΎΡΡΠ°ΡΡΡΡ ΠΆΠΈΠ²ΡΠΌΠΈ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ: Python ΠΊΠ°ΠΊ ΡΠ·ΡΠΊ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠΈΡΠ°. ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎ, ΡΡΠΎ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ΅Ρ (Π΄ΠΎΠ»ΠΆΠ΅Π½) Π±ΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ Π½Π° ΡΠ°Π³ ΠΏΠΎΠ·ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π½Π°Π±ΠΎΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ) ΡΠ°Π·ΡΠ΅ΡΠΈΡ (Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ΅) ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌΠ°.
ΠΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΡΡΠΌΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Π°Ρ, ΠΈ Π·Π΄Π΅ΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΠ·ΠΌΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, ΠΊΠ°ΠΊ pipenv
.
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ Π΄Π°Π»ΡΡΠ΅?
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π²ΡΠ΅ΠΌ Π·Π° ΠΎΡΠ΅Π½Ρ Π²Π΄ΠΎΡ Π½ΠΎΠ²Π»ΡΡΡΡΡ Π΄ΠΈΡΠΊΡΡΡΠΈΡ - Ρ ΡΡΠ²ΡΡΠ²ΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«Π― ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΡΠ΅ΡΡΠ»ΡΡ Π² ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅Β», ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π½ΡΡΠΎΠ΅ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Ρ ΡΡΠΈ ΡΠ°Π·Π° - ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΌΡ ΡΡΠ°Π»ΠΈ Π»ΡΡΡΠ΅.
@vlcinsky poetry
ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Ρ pyenv
. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° pipenv
(Π½ΠΎ Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, IMO), Π½ΠΎ Ρ ΡΠ°ΡΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ.
Π£ Π²Π°Ρ Π΅ΡΡΡ ΡΠ°ΠΉΠ» pyproject.toml
ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π΅Π³ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ), ΠΈ pyproject.lock
ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Python ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ pyproject.toml
ΡΠ°ΠΉΠ» Π·Π°Π΄Π°Π½, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡ pipenv
. Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ poetry
ΠΏΡΠΎΠ²Π΅ΡΠΈΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ ΠΈΡ
Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
Π ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ Π²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (Π° Π½Π΅ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΡ), ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΏΡΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· PyPI).
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠΎ Π»ΡΡΡΠ΅Π΅ ΠΈΠ· ΠΎΠ±ΠΎΠΈΡ ΠΌΠΈΡΠΎΠ².
ΠΠΎΡΠ·ΠΈΡ @zface, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ
ΠΠΎ ΡΡΡΠΈ, ΠΌΡ ΡΡΠ°ΡΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΡΠΈΠ»ΠΈΠΉ Π½Π° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ, Π° Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ Π²ΡΡΠΎΠΊΠΈΠΌΠΈ Π·Π°ΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠ°ΡΠΈΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΠ»ΠΈΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π»ΡΠ΄ΠΈ Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΠΊΡΠ°ΠΉΠ½ΠΈΠΌΠΈ ΡΠ»ΡΡΠ°ΡΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π΅ΡΠΈΡΠ΅, ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π²Π°ΠΌ Π»ΡΡΡΠ΅Π΅ ΠΈΠ· Π²ΡΠ΅Ρ ΠΌΠΈΡΠΎΠ², ΡΠΎΠ³Π΄Π° Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ - ΡΠ°ΠΌ pipenv Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ Π·Π° Π²Π°Ρ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌ Π±ΡΠ΄ΡΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ.
@techalchemy ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠ΄Π°Ρ, Ρ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΏΡΠ°Π²Π»ΡΡ ΠΈΠ΄Π΅ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² pipenv
.
Π poetry
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΎΠ² Π² pyproject.lock
, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ pipenv
Π΄Π΅Π»Π°Π΅Ρ Π² Pipfile.lock
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π² pipenv
. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΠΈ, Π΅ΡΠ»ΠΈ Ρ Π½Π΅ ΠΎΡΠΈΠ±Π°ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ pipenv
.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, - ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ (Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
@vlcinsky ΠΡΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ, ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ°ΡΡΠΈΡΠΈΡΡ, Π½ΠΎ Ρ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΡΠ΅Π½Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΡΠΎΡΠΌΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Pipenv ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅. ΠΡ Π±ΡΠ»ΠΈ Π±Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡ? Π― Π±ΡΠ» Π±Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΡΡΠ°ΡΡΠ»ΠΈΠ² ΠΏΠΎΠΌΠΎΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ°ΡΡΡ.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ·ΠΈΠΈ, Ρ Π»ΠΈΡΠ½ΠΎ Π½Π΅ ΡΠ°Π½Π°Ρ Π² ΡΠ΅Π»ΠΎΠΌ, Π½ΠΎ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ Π²Π΅ΡΠ΅ΠΉ. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Pipenv, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π½Π°ΡΡΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Pipenv Ρ ΠΎΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ»ΠΊΠ½ΡΡΡ Π»ΡΠ΄Π΅ΠΉ, Π½ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ Π² pypa-dev ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π΅ΡΡΡ.
ΠΏΠΎΡΠ·ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈ Π²ΠΊΠ»Π°Π΄Π°. ΠΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°, Π²ΠΊΠ»ΡΡΠ°Ρ Pipenv. ΠΠΌΠ΅Ρ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ Π²ΡΠ±ΠΎΡ, Π»ΡΠ΄ΠΈ ΠΌΠΎΠ³ΡΡ Π²Π·Π²Π΅ΡΠΈΡΡ ΡΠ²ΠΎΠΉ Π²ΡΠ±ΠΎΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°Π³Π»ΡΠ΄ΡΠ²Π°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Ρ Pipenv ΠΈ ΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎΠ³ΠΎ, ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡΡ. Π₯ΠΎΡΠΎΡΠ°Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΡΠΎ ΠΈ Pipenv, ΠΈ ΠΏΠΎΡΠ·ΠΈΡ Π΄Π΅Π»Π°ΡΡ (ΠΈ Π½ΠΈ ΡΠΎ, Π½ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ). ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΌΡ Π½Π°ΡΡΠΈΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³Π°.
@uranusjr ΠΠ°, Ρ Π΄ΡΠΌΠ°Ρ, ΠΊΠΎΠ΅-ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΡΠ½Π΅Π½ΠΎ ΠΈ Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠΉ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠ΅ΠΉ. ΠΠ°ΡΠ° ΠΏΠΎΠΌΠΎΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΠ΅ΡΡΡ.
Π ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ Β«ΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈΒ»? ΠΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ Π²ΡΠ΅Π³ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ Π½Π΅ΠΉ Π² Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΌΠ°ΡΡΡΠ°Π±Π΅ Π²ΡΠ΅Π³ΠΎ Π² Π΄Π²Π° ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°.
ΠΡΠΌΠ°Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π΄Π²ΡΠΌΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ):
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ (Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΎΡΡ) ΠΈ ΠΏΡΠΈΠ³Π»Π°ΡΠΈΡΡ ΠΌΠ΅Π½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ΅Π½Π·Π΅Π½ΡΠ°, Ρ Π±Ρ Π½Π΅ ΡΡΠ°Π» ΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ.
Π― ΡΠ²ΡΠΆΡΡΡ Ρ Π²Π°ΠΌΠΈ ΠΏΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°ΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
@vlcinsky Π’Π°ΠΊΠΆΠ΅ Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ°ΠΊ @uranusjr
Π² PySlackers (ΡΠ°Π±ΠΎΡΠ°Ρ ΠΎΠ±Π»Π°ΡΡΡ Slack), Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π£ Pipenv Π΅ΡΡΡ ΡΠ°ΠΌ ΠΊΠ°Π½Π°Π» ( #pipenv
).
@uranusjr ΠΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρ, pipenv
, Ρ Π΄ΡΠΌΠ°Ρ, Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.
Π§ΡΠΎ ΠΌΠ΅Π½Ρ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ pipenv
ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΡΠ΅Ρ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ the officially recommended Python packaging tool
Ρ
ΠΎΡΡ ΡΡΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, ΡΡΠΎ Π²Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΎΠΌ virtualenv.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ» Π²Π΄ΠΎΡ Π½ΠΎΠ²Π»Π΅Π½ Cargo, npm, yarn, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°ΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π° piping - Π½Π΅Ρ.
Π Π²ΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ pipenv
, ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΠΌΡΡΠΈΡ Π²ΠΎΠ΄Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π»ΡΠ΄ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠ΅ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΡΠΎ ΠΈ ΡΠ°Π½ΡΡΠ΅, Ρ requirements.txt
vs setup.py
. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄ΡΡ ΠΏΠ»ΠΎΡ
ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ Ρ ΠΏΠ»ΠΎΡ
ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Π² ΠΈΡ
setup.py
. ΠΠΎΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΊΠ°ΠΊ Cargo: ΠΎΠ½ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² / ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΈΠΏΠ° pipenv
- Π½Π΅Ρ.
Π ΠΊΠΎΠ³Π΄Π° Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅:
ΡΡΠΎ ΠΈ Pipenv, ΠΈ ΠΏΠΎΡΠ·ΠΈΡ Π΄Π΅Π»Π°ΡΡ (ΠΈ Π½ΠΈ ΡΠΎ, Π½ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ)
Π§ΡΠΎ ΡΡ ΠΈΠΌΠ΅Π΅ΡΡ Π² Π²ΠΈΠ΄Ρ? ΠΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ Π²ΠΈΠ΄Π΅Π», ΠΈΡ
ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠΉΡΠΈΠ², ΡΠ΅ΠΌ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ pipenv
. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ PyPI JSON API, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ
ΠΈΠ·-Π·Π° ΠΏΠ»ΠΎΡ
ΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ Π΄ΡΠΌΠ°Ρ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΠΎΠ±Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΡΠΈΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³Π°.
Π Π΅ΡΠ΅ ΠΊΠΎΠ΅-ΡΡΠΎ: ΠΊΠ°ΠΊΠΎΠ²ΠΎ Π±ΡΠ΄ΡΡΠ΅Π΅ pipenv, Π΅ΡΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ pip ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Pipfile
? ΠΡΠ΄Π΅Ρ Π»ΠΈ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ virtualenv?
ΠΡΠ»ΠΈ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΠΎΡΠ·ΠΈΠΈ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° json api, ΡΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΠ·-Π·Π° Β«ΠΏΠ»ΠΎΡ ΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²Β», Π½ΠΎ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ. Api Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° json ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ _ΡΠ°ΠΌΡΠ΅ Π½Π΅Π΄Π°Π²Π½ΠΈΠ΅_ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π΄Π΅Π»ΠΎ ΡΠΎ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ, ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π²ΠΎΠΎΠ±ΡΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ json api, ΡΡΠΎ Π±ΡΠ»ΠΎ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π±ΡΠ» Π±ΡΡΡΡΡΠΌ, Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΡΠΊΠ°Π·Π°Π»Π° Π½Π°ΠΌ Π½Π΅ Π΄ΠΎΠ²Π΅ΡΡΡΡ Π΅ΠΌΡ. ΠΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΈΡΠΊΡΠ΅Π½Π½ΠΈΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΌ, Π΅ΡΠ»ΠΈ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΎΠ½ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ.
Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ΠΌ Π³ΡΠ°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ. ΠΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΡΠ°ΡΠΈΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ Π½Π° ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Π³ΡΠ°ΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ Π½Π° Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°.
ΠΠ΅Π³ΠΊΠΎ ΠΏΠΎΠΌΠ°Ρ Π°ΡΡ ΡΡΠΊΠΎΠΉ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ: Β«ΠΡ, ΡΠ°Π·Π²Π΅ ΡΡΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ pipenv Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ, Π΅ΡΠ»ΠΈ pip ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ pip-ΡΠ°ΠΉΠ»?Β» ΠΠ΅Ρ. Pipenv - Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠ½ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄Π°ΠΌΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π²Π°ΠΌ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ ΠΎΡΠΌΠ°Ρ ΠΈΠ²Π°Π΅ΡΠ΅ΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΈ ΡΠ²ΠΎΠ΄ΠΈΡΠ΅ ΡΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΡ virtualenv, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΌΠ°ΡΠΊΠ΅ΡΡ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΉ Python, ΠΊΠΎΡΠΎΡΡΡ Ρ Π²Π°Ρ Π½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅, ΠΈ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°ΡΡ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ΠΈ Π²Π΅ΡΡΠΈΡΡ Python. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ»Π΅Ρ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² vcs (ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ Π³ΡΠ°Ρ ΡΠ°ΠΌ), ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ², ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² pypi, ΡΠ°ΡΡΠ½ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΈ Ρ. Π.
Π ΠΊΠΎΠ½ΡΠ΅ Π΄Π½Ρ pip _ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ pip-ΡΠ°ΠΉΠ»Ρ, ΡΡΠΎ ΠΏΠ»Π°Π½, ΡΡΠΎ Π±ΡΠ» ΠΏΠ»Π°Π½ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ°. ΠΠΎ ΡΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΡΠΏΡΠΎΡΠΈΡΡ: Β«Π ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° pip ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ?Β» ΠΠΎΠΏΡΠΎΡ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠΉ. ΠΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠΎΡ ΡΠΎΡΠΌΠ°Ρ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ Π½ΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΠΌΠ½ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ»Ρ (ΠΊΡΡΠ°ΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ pip).
@techalchemy
Api Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° json ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π΄Π΅Π»ΠΎ ΡΠΎ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ, ΠΈ Π΅ΡΠ»ΠΈ Ρ Π½Π΅Π³ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π΅ΡΡΡ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, Π²ΡΠ·Π²Π°Π² https://pypi.org/pypi/{project}/{release}/json
. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅ΡΠ΅ https://pypi.org/pypi/{project}/json
ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π½ΠΎ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
Π ΡΠ°ΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ / ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² python Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΡΠΎ ΠΏΡΠΈΠ½Π΅ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·Ρ Π²ΡΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JSON API.
ΠΠ½ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄Π°ΠΌΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠ°ΠΉΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
ΠΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΌΠ°ΡΠΊΠ΅ΡΡ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΉ Python, ΠΊΠΎΡΠΎΡΡΡ Ρ Π²Π°Ρ Π½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅, ΠΈ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°ΡΡ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ΠΈ Π²Π΅ΡΡΠΈΡΡ Python.
Π poetry
ΡΠΎΠΆΠ΅. Π Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» JSON API, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΈ pipenv
(Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ pip-tools). Π‘ΠΌ. Https://github.com/sdispater/poetry/issues/37#issuecomment -379071989, ΠΈ ΠΎΠ½ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΌ, ΡΠ΅ΠΌ pipenv
(https://github.com/sdispater/poetry#dependency-resolution )
@zface Π― ΡΠΊΠ°ΠΆΡ ΡΡΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π·, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠ°ΠΊ . ΠΡΠ»ΠΈ Π²Ρ ΡΡΠΈΡΠ°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π½Π΅ΡΠΌΠ΅ΡΡΠ½ΠΎ, ΡΠΎΠΎΠ±ΡΠΈΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌ Π»ΠΈΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ Pipenv . ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΠΊΠ»Π°Π΄ΠΈΡΠ΅ ΡΡΠΈ Π²Π΅ΡΠΈ Π½Π° Pipenv dev. ΠΡΠΎ Π½Π΅ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π΅ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΠΆΠ°Π»ΠΎΠ±, ΠΈ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π΄Π΅ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΆΠ°Π»ΠΎΠ±Π°ΠΌ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ Π½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ Ρ Π²Π°Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ. ΠΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΄Π»Ρ Pipenv, Π° Π½Π΅ Π΄ΠΎΡΠΊΠ° ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Python ΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Python.
Pipenv Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° pip-tools Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΠ΅ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΠΎΠ΄Π½ΠΈΡ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅. Π― ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ Π·Π½Π°Ρ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ PyPI api, Ρ ΡΠ°Π·Π³ΠΎΠ²Π°ΡΠΈΠ²Π°Π» Π½Π°ΠΏΡΡΠΌΡΡ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»Π°.
ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ,
Π’Π°ΠΊΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π·Π΄Π΅ΡΡ Π½Π΅ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΠ΅ΡΡΡ. ΠΠ΅ Π΄ΡΠΌΠ°ΠΉΡΠ΅, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΠΎ ΡΠ΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΠΌ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠΎΡΠ²ΠΈΡΠ΅ Π²Π΅ΠΆΠ»ΠΈΠ²ΠΎΡΡΡ.
ΠΎΠ½ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΌ, ΡΠ΅ΠΌ pipenv (https://github.com/sdispater/poetry#dependency-resolution)
Pipenv Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π΅Ρ Π³ΡΠ°ΡΠΈΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π£ΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΡΠ΅Π²ΠΎ Π±ΡΠ»ΠΎ ΡΠΏΠ»ΡΡΠ΅Π½ΠΎ, ΠΈ Π·Π°ΡΠ²Π»ΡΡΡ, ΡΡΠΎ Π²Π΅ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π»ΡΡΡΠ΅ ΠΈ ΡΡΡΠΎΠΉΡΠΈΠ²Π΅Π΅, Π³Π»ΡΠΏΠΎ, Π²Ρ ΡΠ½ΠΎΠ²Π° ΠΈ ΡΠ½ΠΎΠ²Π° Π΄ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΠ΅, ΡΡΠΎ Π²Ρ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΊΠΎΡΠ±Π»ΡΠ΅ΡΠ΅ pipenv ΠΈ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΠ΅ ΠΏΠΎΡΠ·ΠΈΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΡΠΎΡΠΎΠΏΠΈΡΠ΅ΡΡ, ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΠ΅ΡΡΡ.
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎ ΡΠ΅ΠΌΠ΅, ΡΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΈΠ·Π²Π»Π΅ΡΡ Π²ΡΠ³ΠΎΠ΄Ρ ΠΈΠ· Β«Ρ ΠΎΡΠΎΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΒ» Π²ΠΎΠΊΡΡΠ³ pipenv.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½ΠΈΠ΅,
[...] ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΠ΅ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΡΠΎ ΠΈ ΡΠ°Π½ΡΡΠ΅, Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ.txt ΠΈ setup.py. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄ΡΡ ΠΏΠ»ΠΎΡ ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ Ρ ΠΏΠ»ΠΎΡ ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Π² ΠΈΡ setup.py.
Π― ΡΠ°Π·Π΄Π΅Π»ΡΡ ΡΡΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅, Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΡ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Python Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΠ½Π»Π°ΠΉΠ½-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎ Π΄Π΅Π»ΠΎ Π½Π΅ Π² pipenv ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ. ΠΡ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΈΡΡΠΎΡΠΈΡ. ΠΡ, ΠΊΠ°ΠΊ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Python.
Π pipenv (ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΈΡ ΠΈ) - ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠ°Π³ Π²ΠΏΠ΅ΡΠ΅Π΄.
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ Pipfile
Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ setup.py
Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ - ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠ°ΠΊ Π±Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΌΡ Π½ΠΈ ΠΎΠ±ΡΡΡΠ½ΡΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»ΠΎΠ², Π΄Π»ΠΈΠ½Π½ΡΡ
ΡΡΠ°ΡΠ΅ΠΉ ΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ² ΠΏΠΎ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΡΡΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΅ΡΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅. Π― ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎ ΡΠ°ΠΊ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π½Π°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π»ΡΡΡΠΈΠΉ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±.
Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, Ρ Ρ
ΠΎΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ Π΄Π²ΡΠΌΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ, ΠΏΠΎΠΌΠΎΠ³Π°Π» ΠΌΠ½Π΅ ΠΈ Π΄Π΅Π»Π°Π» ΠΌΠΎΡ ΠΆΠΈΠ·Π½Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅.
ΠΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΉ ΡΠ°ΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ requirements.txt/Pipfile
ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ PBR, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° 'easy setup.py', ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Pipfile arround install_requires
, Π±Π΅Π· Π²ΡΠ΅ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ½ΠΎΡΠΈΡ pbr, ΠΈ ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ ΡΡΠΎ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ setuptools, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»ΡΡΡΠ΅Π΅ ΠΎΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΈΡΠ°:
Pipfile
(Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΊΠ°ΠΊ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ
, ΡΠ°ΠΊ ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
)Pipfile.lock
(Π²Π΅ΡΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ)pipfile_setuptools
, install_requires_pipfile
?), ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π·Π°Π΄Π°ΡΠ° ΠΊΠΎΡΠΎΡΠΎΠΉ - ΡΠΎΠ»ΡΠΊΠΎ Π²Π²Π΅ΡΡΠΈ Pipfile
Π² install_requires
.ΠΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ²ΡΠ·Π°Π½ Ρ pipenv
, Π½ΠΎ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ° Pipfile
. Π§ΡΠΎ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅?
@gsemet ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, PyPA ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠΎ pyproject.toml Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, Π²ΠΎ Π³Π»Π°Π²Π΅ Ρ flit . ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡ Ρ Π½ΠΈΠΌΠΈ (Π² pypa-dev ΠΈΠ»ΠΈ distutils-sig) ΠΎΠ± ΡΡΠΎΠΌ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Pipfile Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°. Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Pipfile (ΠΈ ΡΠ°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ), ΠΎΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π² pypa / pipfile (ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ Pipenv ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°).
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ: ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΠΌΠ½Π΅, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ΅ΡΠΈΡΠ΅ Π½Π°ΡΠ°ΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΠΈΠ· ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠ°ΡΡΡΠ»ΠΊΠΈ. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ΄Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π²Π΅ ΡΠ°ΡΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Python.
Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ·Π½Π°ΡΡ, ΡΡΠΎ ΠΌΠ½Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³ΡΡΡΡΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π² pyproject.toml
(ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΠΈ ΠΊΠ°ΠΊ setup.cfg
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ PBR), Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ PyPa ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Pipfile
....
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° flit ΠΈ pipfile. ΠΡΠ΅ Π΅ΡΡΡ pipenvlib ΠΠ΅Π½Π½Π΅ΡΡΠ°ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΌ.
PBR setup.cfg ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡΠΌ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: data_files
), ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°, ΡΠΆΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (flake8, pytest, ...), ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ», ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ» Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Python)
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@ Moritz90 ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠ°ΡΡΡΠ»ΠΊΠΈ Python Π±ΡΠ»ΠΈ Π±Ρ Ρ ΠΎΡΠΎΡΠΈΠΌΠΈ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ.
pypa-dev ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅
python-ideas - ΡΡΠΎ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΠΈΠ΄Π΅ΠΈ, ΠΈ ΠΎΠ½ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π²ΡΠ΅ΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ Python. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΠΎΡΠΏΡΠ°Π²Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ²Π΅ΡΡΠΈ ΡΡΠΎ Π΄ΠΎ ΡΡΠΎΠ²Π½Ρ PEP (Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Ρ Π΄ΡΠΌΠ°Ρ).