рдореИрдВ рдкрд┐рдкреЗрдирд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреА рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ setup(install_requires=...)
рд░рдЦрдиреЗ рдХреА рдЪреБрдиреМрддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреБрд╢рдВрд╕рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ?
[рдЙрддреНрддрд░ 2019-08-23] рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ:
рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдореЗрдВ рддреИрдирд╛рдд рдпрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рдкрд┐рдкрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ install_requires рдореЗрдВ рд░рдЦрд╛ рд╣реИред
рдлрд┐рд░ рдореИрдВ
pipenv install '-e .'
рдЪрд▓рд╛рдХрд░ рдЕрдкрдирд╛ рдкрд┐рдкрдлрд╛рдЗрд▓ setup.py рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдкрд┐рдкреЗрдирд╡ рдореЗрдВ рдПрдХ рдЕрдЬрдЧрд░ рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЬрдм рдореИрдВ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рд╕реВрдЪреА рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
from setuptools import setup
from pipenv import find_install_requires
setup(
# ...
install_requires=find_install_requires()
# ...
)
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ pipfiles [packages] рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА рдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдкрд┐рдкрдлрд╛рдЗрд▓ , рдкрд┐рдкреЗрдирд╡ рдХреЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
import pipfile
pf = pipfile.load('LOCATION_OF_PIPFILE')
print(pf.data['default'])
рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдпрд╛ setup.py рдореЗрдВ Pipenv рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред pipenv
(рдпрд╛ pipfile
) рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдкрд┐рдкреЗрдирд╡ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдмрд┐рдирд╛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЗрд╕рдореЗрдВ рдЭрд╛рдВрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ( setup.py egg_info
) рдЬреАрддрд╛ рдХрд╛рдо рдирд╣реАрдВред Setup.py рдХреЗрд╡рд▓ Setuptools рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдордзреНрдпрдо рдЬрдореАрдиреА рд╕рдорд╛рдзрд╛рди рдмрдореНрдкрд╡рд░реНрд╕рди рдХреЗ рд╕рдорд╛рди рдПрдХ рдЙрдкрдХрд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ setup.py рдореЗрдВ рдкрдврд╝реЗрдВред рдлрд┐рд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЖрдИ рдпрд╛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рд╣рдореЗрд╢рд╛ рд╕рд┐рдВрдХ рдореЗрдВ рд╣реЛрдВред
рд╣рд╛рдБ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдореБрдЭреЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВред
рд╢рд╛рдпрдж "рдкрд┐рдкреЗрдирд╡ рдЗрдВрд╕реНрдЯреЙрд▓" рд╕рд┐рдВрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рд╕реЛрдо, 8 рдЬрдирд╡рд░реА 2018 рдХреЛ рд╢рд╛рдо 5:04 рдмрдЬреЗ, рддреНрдЬрд╝реБ-рдкрд┐рдВрдЧ рдЪреБрдВрдЧ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
Pipfile https://github.com/pypa/pipfile , рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:рдкрд╛рдЗрдкрдлрд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВ
pf = pipfile.load ('LOCATION_OF_PIPFILE')
рдкреНрд░рд┐рдВрдЯ (рдкреАрдПрдлред рдбреЗрдЯрд╛ ['рдбрд┐рдлрд╝реЙрд▓реНрдЯ'])рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдпрд╛ setup.py рдореЗрдВ Pipenv рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред
pipenv (рдпрд╛ pipfile) рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдХрд┐ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдФрд░ рдкрд┐рдкреЗрдирд╡ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕рдореЗрдВ рдЭрд╛рдВрдХреЗрдВ (setup.py Egg_info) рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
setup.py рдХреЗрд╡рд▓ Setuptools рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрдПрдХ рдордзреНрдпрдо рдЬрдореАрдиреА рд╕рдорд╛рдзрд╛рди рдмрдореНрдкрд╡рд░реНрд╕рди рдХреЗ рд╕рдорд╛рди рдПрдХ рдЙрдкрдХрд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛
https://github.com/peritus/bumpversion рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ
рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдлрд╛рдЗрд▓ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдкрдврд╝реЗрдВ
setup.py рдореЗрдВ рдлрд┐рд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЖрдИ рдпрд╛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рд╣рдореЗрд╢рд╛ рд╣реИрдВ
рдореЗрд▓ рдореЗрдВред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/pypa/pipenv/issues/1263#issuecomment-355889369 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/ALMBlmmV52kdIL9D4zlMJoQh2JpaGdDbks5tIa_jgaJpZM4RRu3v
.
@uranusjr рдпрд╣рд╛рдВ рдореЗрд░реА рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ pipenv рдХреЛ setup.py рдХреЗ setup_requires рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП, рдФрд░ рдПрдХ setuptools рдХрдорд╛рдВрдб рдореЗрдВ pipenv рдЖрдпрд╛рдд рдореЗрдВ рджреЗрд░реА рд╣реЛ? рдпрд╛ рдЗрд╕реЗ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?
@ рдХреЛрд░рд┐рдЬрди рдпрд╣ рдкреНрд░рддрд┐ рд╕реЗ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрдерди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрд┐рдкреЗрдирд╡ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдмрд╣реБрдд рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИред Pipenv рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ (рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рдЕрдВрджрд░ред
рддреЛ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛? рдХреНрдпрд╛ Pipfile
рдФрд░ setup.py
рдореЗрдВ рджреЛрдиреЛрдВ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ?
рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдореЗрдВ рддреИрдирд╛рдд рдпрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рдкрд┐рдкрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ install_requires рдореЗрдВ рд░рдЦрд╛ рд╣реИред
рдлрд┐рд░ рдореИрдВ pipenv install '-e .'
рдЪрд▓рд╛рдХрд░ рдЕрдкрдирд╛ рдкрд┐рдкрдлрд╛рдЗрд▓ setup.py рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реВрдВред
[рдЕрджреНрдпрддрди 2019-08-23] рдореИрдВ рдЖрдЬрдХрд▓ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рджреЗрд╡ рдкреИрдХреЗрдЬ рд░рдЦрддрд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ setup.py рдореЗрдВ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ рдХреЛрд░рд┐рдЬрди рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдкрд┐рдкрдлрд╛рдЗрд▓ (рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБред txt) рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ; setup.py рд╕рдВрдХреБрд▓ рдХреЗ рд▓рд┐рдП рд╣реИред рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреА рдкреВрд░реНрддрд┐ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЖрдИрдПрдордУ)ред
@uranusjr рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВред
рдкрд┐рдкреЗрдирд╡ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рднреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рджреБрдирд┐рдпрд╛ (рдмрдВрдбрд▓рд░, рдХрдВрдкреЛрдЬрд░, рдПрдирдкреАрдПрдо, рдХрд╛рд░реНрдЧреЛ, рдпрд╛рд░реНрди, рдЖрджрд┐) рдХреЛ рдкрд╛рдпрдерди рджреБрдирд┐рдпрд╛ рдореЗрдВ рд▓рд╛рдирд╛ рд╣реИред рд╡рд┐рдВрдбреЛрдЬрд╝ рд╣рдорд╛рд░реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХрд╛ рдирд╛рдЧрд░рд┐рдХ рд╣реИред
рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдкрдХреЗ рдкрд┐рдкрдлрд╛рдЗрд▓ рд╕реЗ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рддрд╛/рд╣рдЯрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓/рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрд╢рд╛-рдорд╣рддреНрд╡рдкреВрд░реНрдг Pipfile.lock рднреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрддрд╛рддреНрдордХ рдмрд┐рд▓реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдБред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдмрдпрд╛рди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ pipenv
PHP рдХреЗ рд▓рд┐рдП рдХрдВрдкреЛрдЬрд░ рдХреЗ рд╕рдорд╛рди рдПрдХ рдкреВрд░реНрдг рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реЛрдиреЗ рд▓рдЧрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ pipenv
рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ Pipfile рдФрд░ Pipfile.lock рд╣реИ, рд▓реЗрдХрд┐рди setup.py рдореЗрдВ рдХреЛрдИ install_requirements рдирд╣реАрдВ рд╣реИред
@vascowhite рдЬреЛ рд╕рд╡рд╛рд▓ рдЖрдк рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдкрд┐рдкреЗрдирд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдмрд▓реНрдХрд┐ рдкрд╛рдЗрдерди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХреЗ рдмреАрдЪ рдореМрд▓рд┐рдХ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдкрд╛рдпрдерди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ, setup.py
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рддрд░рдг рдпреЛрдЧреНрдп рдкреИрдХреЗрдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ requests
рдЬреИрд╕рд╛ рдкреИрдХреЗрдЬ рд╣реИ, рдФрд░ рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ cffi
рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ setup.py
рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЬрдм рд▓реЛрдЧ pip install requests
рдЪрд▓рд╛рдПрдВ
рдкрд┐рдкрдлрд╛рдЗрд▓реНрд╕, рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреА рддрд░рд╣, рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдПрдХрд▓ рдкрд╛рдЗрдкрдлрд╛рдЗрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдкрд░ рд╢рд╛рд╕рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдиреЗ рдкрд┐рди рдХреА рдЧрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдПрдХ рдЪрдкрдЯреА рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХреА, рдЬрдмрдХрд┐ рдкрд┐рдкрдлрд╛рдЗрд▓реНрд╕ рдореЗрдВ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ рд╡рд╣рд╛рдВ рдЕрдирдкрд┐рди рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдХреЛрдИ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕рдХреА setup.py
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рднреА рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдкрдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╣рд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рдпрдерди рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред pipenv install
рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрддрдГ рдПрдХ рд▓рдХреНрд╖реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ setuptools
рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдХреА рд╕реНрдерд╛рдкрдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдЗрд╕рдХреА рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@techalchemy рдореИрдВ рдЖрдкрдХреЗ рдкреЙрдк рдЕрдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реА рддрд░рд╣ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдзрд╛ рд░рд╛рд╕реНрддрд╛ рдерд╛ (рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрдВ)
рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ @vascowhite рдЬреЛ рдЖрдк рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдЪрд┐рддреНрд░ рдирд╣реАрдВ рд╣реИред рдкрд┐рдкрдлрд╛рдЗрд▓ рдФрд░ рд▓реЙрдХ рдлрд╛рдЗрд▓ рджреЛрдиреЛрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рд╕рдореЗрдЯрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдкрд┐рдкрдлрд╛рдЗрд▓ setup.py рдХреЗ install_requires
рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдареЛрд╕ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд╛рдпрдерди рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рд╡рд░реНрддрдорд╛рди рд╕рдордп рдореЗрдВ рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдлрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣реЗрдХ, рдкрд┐рдкреЗрдирд╡ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИ (рдкреАрдПрд╕ рдХрд┐рд╕реА рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ), рдпрд╣ рд╢рд╛рдпрдж рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдПред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрд╢рд╛ рдирд╣реАрдВ рдЦреЛрдИ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реА рдирд╣реАрдВ)ред рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреАрдИрдкреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реЗрдЯрдЕрдк.py рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИрдВ, рджреЛрдиреЛрдВ рдПрдХ рдХрдареЛрд░, рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рд╛рд░реВрдк рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдЗрддрдиреЗ рдмрдбрд╝реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЛрдВ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдпрд╛ рдкрд╛рдпрдерди 3.0 рджреЗрдЦреЗрдВ), рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред
@techalchemy @uranusjr
рдЖрдкрдХреЗ рд╕реНрдкрд╖реНрдЯ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рджреЛрдиреЛрдВ рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рд╡реЗ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╕реАрдзрд╛ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рдХреНрдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдкреНрд░рд▓реЗрдЦрди рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рднреНрд░рдо рдХрд╛ рдХрд╛рд░рдг рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рднреНрд░рдо рдореЗрд░реЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╣реИ :)
PHP рд╕реЗ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдкрд╛рдЗрдерди рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реВрдВ, рд╕рдВрдЧреАрддрдХрд╛рд░ рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╣рд╡рд╛ рд╣реИред рдореБрдЭреЗ рдЕрдЬрдЧрд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рдЖрдЗрдП рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЪреАрдЬреЗрдВ рд╕реБрдзрд░реЗрдВрдЧреА, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╡реЗ рдЖрдкрдХреЗ рдФрд░ рдХреЗрдиреЗрде рд░рд┐рдЯреНрдЬ рдЬреИрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗред
рдпрджрд┐ рдЖрдк рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рдореЗрд░реА рд╕рд▓рд╛рд╣ рдкрд░ рдХрд╛рдпрдо рд░рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк setup.py рдФрд░ pipenv рджреЛрдиреЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдордВрдЬрд╕реНрдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдм рдЙрддрд╛рд╡рд▓реЗ рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред :)
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдБ #1398
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЬрд┐рддрдирд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдмреЗрд╣рддрд░ рд░рдЦреЛ :)
рдПрдХ setup.py
$ рдХреЗ рд╕рд╛рде pipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрдП; рдЪрд░реНрдЪрд╛ рдореЗрдВ рдореЗрд░реЗ .2 рд╕реЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЬрдЧрд░ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ setup.py
рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
setup(
name='my-pkg-name',
packages=find_packages(),
install_requires=[...],
extras_require={
'develop': ['click']
},
entry_points={
'console_scripts': [
'my-pkg-name-cmdline = my-pkg-name.cli:tool'
]
}
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рдореЗрдВ click
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдЬрдм рдореИрдВ $ my-pkg-name-cmdline build
рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ click
рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рдорд┐рд▓рддрд╛, рдХреНрдпреЛрдВрдХрд┐ pipenv install --dev
pipenv virtualenv рдореЗрдВ рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pipenv shell/exit
рдХреЗ рд╕рд╛рде рдлреАрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЕрднреА рднреА рдХреБрдЫ рдЦреБрд░рджреБрд░реЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП +1 рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП pipenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрд╕реЗ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ pipenv run my-pkg-name-cmdline build
рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИред
@ рдХреЛрд░рд┐рдЬрди рдореИрдВ рдЕрднреА рднреА рд╕рд╣реА рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ (рдЕрднреА рднреА рдкрд┐рдкреЗрдирд╡ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред
рдЕрднреА рддрдХ, рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╣реИ:
(starting from scratch)
1- pipenv --three
2- pipenv install [--dev]
3- pipenv install -e . (install application locally)
4- pipenv shell (to enter the virtualenv)
рдЕрдм рдореИрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЕрдкрдирд╛ рдкреИрдХреЗрдЬ рдмрд┐рд▓реНрдб click
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВред
рдЕрдЧрд░ рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ (рдЪрд░рдг 3) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ (рдЪрд░рдг 4) рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдореБрдЭреЗ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреИрдХреЗрдЬ pipenv shell
рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП ( virtualenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рд╕рдХреНрд░рд┐рдп рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред
@apiraino рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣реАрдВ рдЪреАрдЬрд╝ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдХреНрд▓рд┐рдХ (рдЖрдпрд╛рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп install_requires
рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ (рд╕реНрд╡рдпрдВ рд╕рд╣рд┐рдд) рдХреНрд▓рд┐рдХ рднреА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХреЗрдВред рдЗрд╕реЗ extras_require['dev']
рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдпрд╛рдиреА рдЖрдкрдХрд╛ рдкреИрдХреЗрдЬ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВред
рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдкрд┐рдкреЗрдирд╡ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдордВрдЪ рдкрд░ рд▓рд╛рдПрдБ, рдЬреИрд╕реЗ рдХрд┐ StackOverflow рдпрд╛ Python- рд╕рдВрдмрдВрдзрд┐рдд рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪрд┐рдпрд╛рдБред
@Korijn pipenv install '-e .'
рдПрдХ Pipfile
$ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ setup.py рдореЗрдВ install_requires рдХреЗ рддрд╣рдд рд╕реВрдЪреАрдмрджреНрдз рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдкрд┐рдкреЗрдирд╡ 9.0.3 рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИред
рдореИрдВ рдЕрдкрдиреЗ setup.py
рдХреЗ install_requires рд╕реЗ Pipfile
рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рди рдХрд░реЗрдВ
рдореИрдВрдиреЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ Pipfile
рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ install_requires
рдЕрдиреБрднрд╛рдЧ рд╕реЗ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ setup.py
ред
@рдмреЗрдВрдЬрд╛рдорд┐рдирд╡реЗрдм рдореИрдВ рдЖрдЬ рдЙрд╕реА рдЪреАрдЬрд╝ рд╕реЗ рднреНрд░рдорд┐рдд рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
@techalchemy рдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐
рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ рд╡рд╣рд╛рдВ рдЕрдирдкрд┐рди рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдХреЛрдИ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕рдХреА setup.py рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рднреА рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк https://github.com/pypa/pipenv/issues/1263#issuecomment -362600555 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдЖрдк рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ Pipfile рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ pipenv install '-e .'
рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ pipenv рдПрдХ рдирдпрд╛ Pipfile рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:
[packages]
"e1839a8" = {path = ".", editable = true}
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХрдорд╛рддреНрд░ рдкреИрдХреЗрдЬ рдкреИрдХреЗрдЬ рд╣реА рд╣реИ (рдпрд╛рдиреА "ред"), рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ "ред" рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ ( [packages]
) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдпрджрд┐ рдЖрдк pipenv install requests
, рддреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ setup.py рд╕реЗ install_requires
рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ Pipfile рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдЪрд░рдг рдЖрдЧреЗ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ install_requires
рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреА ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Pipfile рдХреЗ рд╡рд┐рдкрд░реАрдд, Pipfile.lock рд╕рдВрдкреВрд░реНрдг рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдЯреАрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЙрдХ рдХреА рдЧрдИ install_requires
рдирд┐рд░реНрднрд░рддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк Pipfile.lock рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк install_requires
рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реВрдЪреАрдмрджреНрдз рджреЗрдЦреЗрдВрдЧреЗред
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @techalchemy рдпрд╛ @uranusjr рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ?
рдЖрдкрдХреА рд╕реЛрдЪ рдореЗрд░реЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдореИрдВ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ Setuptools рдЙрдиреНрдирддрд┐ рдФрд░ Flit рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдЖрдк рдЕрднреА рднреА рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдЪреНрдЫреЗ TOML рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реЗрдЯрдЕрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмрдЬрд╛рдп, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ)ред рдЖрдк рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп pyproject.toml рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
@uranusjr рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯрдЕрдк рдЯреВрд▓ рдпрд╛ рдлреНрд▓рд┐рдЯ (setup.py рдпрд╛ pyproject.toml рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ setup.py рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
install_requires=['A'],
extras_require={
'dev': ['B'],
},
рддрдм рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
"e1839a8" = {path = ".", editable = true}
[dev-packages]
"e1839a8" = {path = ".", extras = ["dev"], editable = true}
pipenv install
рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ A рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдЧреА, рдФрд░ pipenv install --dev
рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ A рдФрд░ B рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧреАред
рдпрджрд┐ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Setuptools рдпрд╛ Flit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ [packages]
рдпрд╛ [dev-packages]
рдХреЗ рддрд╣рдд Pipfile рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рд╡рд┐рдХрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ [dev-packages]
рдХреЗ рддрд╣рдд рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди install_requires
рдФрд░ test_requirements
рдирд┐рд░реНрднрд░рддрд╛ рд╕рднреА рд╕реЗрдЯрдЕрдк рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХреА рдЧрдИ рд╣реИрдВ .py.
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд┐рдкрдлрд╛рдЗрд▓ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдпрджрд┐ рдЖрдк рд╕реЗрдЯрдЕрдкрдЯреВрд▓ рдпрд╛ рдлреНрд▓рд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рдпреЗ рд╕рд╣реА рд╣реИ? рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд╕рдЪ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╕рдВрдж рд╣реИред рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ extras_require[dev]
рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдкрд░рдВрдкрд░рд╛ рд╣реИ; dev-packages
OTHO рдПрдХ рд╕реБрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреБрдВрдЬреА рд╣реИред extras_require[dev]
рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ pip install package[dev]
рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
packages
рдХреЗ рд▓рд┐рдП, рдирд╣реАрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдкрд░рд┐рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИ рдЬреЛ install_requires
IMO рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд▓реЛрдЧ рд░рдЪрдирд╛рддреНрдордХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред
рдпрд╣ рдореБрджреНрджрд╛ рдХреНрдпреЛрдВ рдмрдВрдж рд╣реИ?
@JulienPalard рдпрд╣ рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдмрдВрдж рд╣реИ:
setup.py
рдлрд╛рдЗрд▓реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВ, рдкреНрд░рддрд┐ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЯреАрдПрд▓; рдбреЙ Pipfile
рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рд╢реАрд░реНрд╖ рд╕реНрддрд░ requirements.txt
setup.py
рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗрд╡рд▓ pipenv install -e .
рд╣реЛрдЧрд╛ - рдпрд╣ рдЖрдкрдХреЗ Pipfile
рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдбрд╛рд▓рддрд╛ рд╣реИ Pipfile.lock
рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ install_requires
рд╕рд╣рд┐рддред рдпрджрд┐ рдЖрдк рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд install_requires
рдХреЗ рдХрд╛рд░рдг рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЛ рдирд╡реАрдирддрдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ pipenv update
рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ pipenv lock && pipenv sync
рдХреЗ рд╕рдорд╛рди рд╣реИредрдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИ!
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ Pipfile
рд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╛рди рд╣реИрдВ, $#$ requirements.txt
$#$ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ: requirements.txt
рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдПрдХ рдлреНрд▓реИрдЯ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ Pipfile
рдФрд░ setup.py
рдХреЗрд╡рд▓ рдкреНрд░рд╡реЗрд╢ рд╕реНрддрд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Pipfile.lock
рдФрд░ requirements.txt
рдореЗрдВ рд╕рдорд╛рди рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред
рдореИрдВрдиреЗ рдПрдХ POC рд╕рд┐рдВрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЬрд┐рд╕реЗ рдЖрдЧреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ:
https://gist.github.com/iddan/f190c3c7d54f4fc4655da95fb185e641
@iddan рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪреАрдЬ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рд╕реВрдЪреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ _рдПрдкреНрд▓рд┐рдХреЗрд╢рди_ ( setup.py
) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ _ рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ ( Pipfile
)ред
setup.py
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреВрд░реНрд╡ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдУрдкрди-рдПрдВрдбреЗрдб рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк requirements.txt
рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдпрд╣рд╛рдВ рдУрдкрди-рдПрдВрдбреЗрдб рдирд┐рд░реНрднрд░рддрд╛ рдкрд┐рдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред Pipfile
рдЖрдк рд╕рдЦреНрдд рдпрд╛ рдвреАрд▓реЗ рдкрд┐рди рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реА рддрд░рд╣ рдЗрд╕реЗ рдЖрдкрдХреЗ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдХреА _unflattened_ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдЪреАрдЬреЗрдВ requirements.txt
рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рд╣реИрдВ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рдЬреЛрд░ рджреЗ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рд╣рд░ рдмрд╛рддрдЪреАрдд рдФрд░ рд╣рд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдФрд░ рдкреАрдкреАрдП рджреНрд╡рд╛рд░рд╛ рдбрд╛рд▓реЗ рдЧрдП рд╕рднреА рдореИрд╕реЗрдЬрд┐рдВрдЧ рдореЗрдВ рдЗрд╕ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реБрдП рд╕реБрдиреЗрдВрдЧреЗред
Pipfile.lock
рдФрд░ requirements.txt
рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рдПрдХ Pipfile.lock
requirements.txt
рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рдордзреНрдпрд╕реНрде Pipfile
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реАрдзреЗ рд▓реЙрдХрдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Pipfile.lock
рдПрдХ рд╕рдВрдХреНрд░рдордгреАрдп рдмрдВрдж рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдПрдХ рдордзреНрдпрд╕реНрде Pipfile
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореВрд▓ рдкреНрд░рд╢реНрди рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╢реНрди рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ setup.py
рдлрд╝рд╛рдЗрд▓ рдХреЛ Pipfile
рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдЬрдм рдЖрдк pipenv lock
рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ setup.py
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрд╡рддрдГ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рдореИрдВ рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, @iddan , рдпрд╛ рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд╛рд░реНрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдк рдбреЛрдирд╛рд▓реНрдб рд╕реНрдЯрдл рдХреЗ рд▓реЗрдЦ рдХреЛ setup.py рдмрдирд╛рдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рдкрдврд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред txt рдпрд╛ рд╣рдорд╛рд░реЗ рдПрдХ рдЕрдиреБрд░рдХреНрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рднреЗрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд┐рдкреЗрдирд╡ рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЗ рд╣реЗрд▓реНрде рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрдВрддрд░рд┐рдХ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрдкреЛ рд╣реИ рдЬреЛ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреИрдХреЗрдЬ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рджреЗрд╡/рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмреАрдЪ рдЕрдкрдиреА рд╢реАрд░реНрд╖ рд╕реНрддрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, Pipfile
setup.py
рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
#2148 рдХреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ (requirements.txt рдХреЛ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛)ред
рд▓реЗрдХрд┐рди рдпрд╣ setup.py
. рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ
рдЗрд╕ред рдореБрджреНрджрд╛ред рдЪрд╛рд╣рд┐рдПред рдирд╣реАрдВред рд╣реЛрдирд╛ред рдмрдВрдж рдХрд┐рдпрд╛ рд╣реБрдЖред
рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐
рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдмрд╣реБрдд рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╕реНрд╡рдпрдВ рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдПрдВред рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЗрддрдиреА рдЕрдзрд┐рдХ рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдХреЗ рд╕рд╛рде, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрд░реНрд╖рдг рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рдХрд░реНрд╖рдг рдХреЗ рд╕рд╛рде, рдкреАрдкреАрдП рдЗрд╕реЗ рдкрд┐рдкреЗрдирд╡ рдХреА рддрд░рд╣ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЧрд╛рдЗрдб рдореЗрдВ рд╕реБрдЭрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдХреГрдкрдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рд╕рдореНрдорд╛рдирдкреВрд░реНрд╡рдХ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рднреА рд╕реАрдЦреЗрдВред рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЖрдЪрд╛рд░ рд╕рдВрд╣рд┐рддрд╛ рджреЗрдЦреЗрдВред рд╣рдо рдЙрддреНрдкрд╛рджрдХ рдЪрд░реНрдЪрд╛ рдХрд░рдХреЗ рдЦреБрд╢ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдо рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХ рд╣реИрдВ рдФрд░ рд╣рдо рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЗрдЪреНрдЫрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдВред
рдореИрдВ рдЖрдЧреЗ рдХреА рдЪрд░реНрдЪрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдХ рдХрд╛рдо рдХрд░реЛ рдФрд░ рдЕрдЪреНрдЫреЗ рд╕реЗ рдХрд░реЛ!
рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ,
@ рдХреЛрд░рд┐рдЬрди рдореИрдВрдиреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкрдврд╝рд╛ рдЬрд╣рд╛рдВ рдЖрдк рдмрддрд╛ рд░рд╣реЗ рдереЗ рдХрд┐ рдЖрдк рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде setup.py рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП extra_requires рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ Pipfile.lock рдореЗрдВ dev рдЕрдиреБрднрд╛рдЧ рдореЗрдВ extra_require рд╕рдВрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЦрд╛рд▓реА venv рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ рдФрд░ pipenv install --dev рдХрд░реЗрдВ , рдХреНрдпреЛрдВрдХрд┐ Pipfile.lock рдореЗрдВ extra_require рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдирд╣реАрдВ рд╣реИрдВ pipenv рдХреЗрд╡рд▓ рд╕рдВрдХреБрд▓ рдХреЛ install_require рдкрд░ рд╕рдВрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
setup.py
import os # noqa: D100
from setuptools import setup, find_packages
def read(fname):
"""Read a file and return its content."""
with open(os.path.join(os.path.dirname(__file__), fname)) as f:
return f.read()
setup(
name='auditor_client',
version='0.0.0',
description='Auditor client package',
long_description=read('README.md'),
packages=find_packages(exclude=['tests']),
install_requires=['requests==2.9.1'],
extras_require={'dev': ['flake8', 'flake8-docstrings', 'pytest', 'coverage', 'tox']},
setup_requires=["pytest-runner"],
tests_require=["pytest"]
)
рдкрд┐рдкрдлрд╛рдЗрд▓
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[packages]
"e1839a8" = {editable = true, path = "."}
[requires]
python_version = "3.6"
[dev-packages]
"e1839a8" = {editable = true, extras = ["dev"], path = "."}
рдкрд┐рдкрдлрд╛рдЗрд▓.рд▓реЙрдХ
{
"_meta": {
"hash": {
"sha256": "e58b833e497814c83a2f0b93ad21d33a2af8b72721b20e9607a6c9135978422d"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.6"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"e1839a8": {
"editable": true,
"path": "."
},
"requests": {
"hashes": [
"sha256:113fbba5531a9e34945b7d36b33a084e8ba5d0664b703c81a7c572d91919a5b8",
"sha256:c577815dd00f1394203fc44eb979724b098f88264a9ef898ee45b8e5e9cf587f"
],
"version": "==2.9.1"
}
},
"develop": {
"e1839a8": {
"editable": true,
"path": "."
},
"requests": {
"hashes": [
"sha256:113fbba5531a9e34945b7d36b33a084e8ba5d0664b703c81a7c572d91919a5b8",
"sha256:c577815dd00f1394203fc44eb979724b098f88264a9ef898ee45b8e5e9cf587f"
],
"version": "==2.9.1"
}
}
}
рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ Pipfile.lock рдиреЗ extra_require dev рд╕рдВрдХреБрд▓ рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рд╣реИ?
рд╣рд╛рдБ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдЧ/рд╕реАрдорд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдмрдЧ/рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЦреБрд▓ рдЧрдИ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрднреА рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ред рдХреГрдкрдпрд╛ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЦреЛрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореМрдЬреВрджрд╛ рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж :)
рдпрд╣ рдХреЛрдИ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдПрдХ рд╣реА рдЖрдзрд╛рд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдХрдИ рдмрд╛рд░ рдкрд╛рдЗрдкрдлрд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк dev
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рднреА рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрднрд╛рдЧ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддрд╛ рд╣реИ рдЪрд╛рд╣реЗ рдХреБрдЫ рднреА рд╣реЛред
рдореИрдВ рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╢рдмреНрдж рд▓реЗрдВ рдХрд┐ рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрдШрд░реНрд╖ рдФрд░ рдЖрд╢реНрдЪрд░реНрдп рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдХреБрдЫ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдПрдХ рд╕рдВрдШрд░реНрд╖ рдЫреБрдкрд╛ рд░рд╣реА рдереАред
@techalchemy рддреЛ рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрдиреА рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ packages
/ dev-packages
рднреЗрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред {editable = true, extras = ["dev"], path = "."}
рдХреЛ packages
рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗред
рдЗрд╕ рдкрд┐рдкреЗрдирд╡-рд╕реЗрдЯрдЕрдк рдкреИрдХреЗрдЬ рдХреЛ рджреЗрдЦреЗрдВ
рдпрд╣ pipfile/lockfile рдХреЛ setup.py . рдореЗрдВ рд╕рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ
$ pipenv-setup sync
package e1839a8 is local, omitted in setup.py
setup.py successfully updated
23 packages from Pipfile.lock synced to setup.py
рдЖрдк рд╡рд┐рдХрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $ pipenv-setup sync --dev
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ $ pipenv-setup sync --pipfile
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкрд╛рдЗрдкрдлрд╛рдЗрд▓ рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдФрд░ $ pipenv-setup check
рдХреЗрд╡рд▓ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдЙрди рд╕рднреА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢
рдХреНрдпрд╛ рдкрд┐рдкреЗрдирд╡-рд╕реЗрдЯрдЕрдк рдкреИрдХреЗрдЬ рдХреЛ рдкрд┐рдкреЗрдирд╡ рдореЗрдВ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?
@ рдкреАрдЯрд░рдбреЗрдореЗ
рдХреНрдпрд╛ рдкрд┐рдкреЗрдирд╡-рд╕реЗрдЯрдЕрдк рдкреИрдХреЗрдЬ рдХреЛ рдкрд┐рдкреЗрдирд╡ рдореЗрдВ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?
@uranusjr @techalchemy рдКрдкрд░ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдкреЗрдирд╡ рдХрд╛ рдХреБрдЫ рдЕрд▓рдЧ рджрд░реНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЕрдиреБрд░рдХреНрд╖рдХ рд╕рд╣рдордд рд╣реИрдВ, рддреЛ рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ pipenv-setup
рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рдЖрдк Pipfile.lock
рдХреЛ рдмрд┐рд▓реНрдЯрд┐рди json
рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ non-dev
рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдиреЗ setup.py
install_requires
рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд▓реЗрдВред
"default"
рдХреБрдВрдЬреА рдореЗрдВ version
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдФрд░ markers
рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдирд╛рдо рдХреЗ рдиреЗрд╕реНрдЯреЗрдб "рдбрд┐рдХреНрдЯреНрд╕" рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЖрдкрдХреЛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЖрдпрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
@ рдХрд┐рд▓реЛ59 рдореИрдВрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдРрд╕рд╛ рдХрд░рддреЗ рджреЗрдЦрд╛ рд╣реИред рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдк рд╣реИ, Pipfile.lock рдХреЛ data_file рдХреЗ рд░реВрдк рдореЗрдВ setup.py рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ (рдпрд╛ рдЗрд╕реЗ MANIFEST.in рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ)ред рдФрд░ рдпрд╣ рдкрд┐рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдХрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╣реИред рджреВрд╕рд░реА рдУрд░, pipfile, рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реИ, рдпрджрд┐ рдЖрдк Pipfile рдореЗрдВ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдИ рд░реВрдкреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж @Madoshakalaka рдЖрдкрдХрд╛ рдЯреВрд▓ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдореИрдВ рдЕрдиреНрдп рд╕рд╛рдерд┐рдпреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Setup.py рдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкрд┐рдкрдлрд╛рдЗрд▓ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореИрдиреНрдпреБрдЕрд▓ рд╢реНрд░рдо рдХреЗ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХрд╛ рдПрдХ рдорд╣рд╛рди рд╕рдордп рдмрдЪрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдЯрд╛рдЗрдкреЛ/рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ setup.py рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реНрдкрд░реНрд╢ рдерд╛: +1:
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдореЗрдВ рддреИрдирд╛рдд рдпрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рдкрд┐рдкрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ install_requires рдореЗрдВ рд░рдЦрд╛ рд╣реИред
рдлрд┐рд░ рдореИрдВ
pipenv install '-e .'
рдЪрд▓рд╛рдХрд░ рдЕрдкрдирд╛ рдкрд┐рдкрдлрд╛рдЗрд▓ setup.py рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реВрдВред[рдЕрджреНрдпрддрди 2019-08-23] рдореИрдВ рдЖрдЬрдХрд▓ рдкрд┐рдкрдлрд╛рдЗрд▓ рдореЗрдВ рджреЗрд╡ рдкреИрдХреЗрдЬ рд░рдЦрддрд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ setup.py рдореЗрдВ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддрд╛ рд╣реИред