Π― ΡΠ΅Π»ΡΠΉ Π΄Π΅Π½Ρ ΡΠΈΡΠ°Π» ΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΠΎΠ΄Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈΠ· git, ΠΈ Ρ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΡΠ°ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
Π― ΡΠ°Π·Π΄Π²ΠΎΠΈΠ» ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Python (Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π½Π° PyPi), Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΠ΄ Π»ΠΈ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π² Π°ΠΏΡΡΡΠΈΠΌ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΌΠΎΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π²ΠΈΠ»ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π Π°Π½ΡΡΠ΅ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Pipenv Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ Ρ ΠΌΠΎΠ³ Π»Π΅Π³ΠΊΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ / ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΠΈΠ· Git Π² Pipfile. ΠΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΡΠΎΡΠ»ΠΎ, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΡ Π΅Π³ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ (Π½Π° PyPi ΠΎΠ½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡΡΡ). ΠΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΎΡ Git Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
Π― ΠΏΡΠΎΡΠΈΡΠ°Π» ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΡΠΏΡΡΠΊΠΈ: β 3610, β 4187, β 2124, β 5384 ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, PEP. ΠΠΎΠ³Π΄Π° Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ» ΡΠΈΡΠ°ΡΡ, Ρ Π±ΡΠ» ΡΠ±ΠΈΡ Ρ ΡΠΎΠ»ΠΊΡ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠ°Π».
ΠΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ ΠΏΠΎΠ½ΡΠ» Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ PEP-508 Π² ΠΏΡΠ½ΠΊΡΠ΅ 10, Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
setup(
name='dmfigol',
...
install_requires=[
"requests",
'smartsheet-python-sdk @ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3',
],
)
ΠΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
-> % pip install git+https://<private-git>/dmfigol/my-test-project.git
Collecting git+https://<private-git>/dmfigol/my-test-project.git
...
Direct url requirement (like smartsheet-python-sdk@ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3) are not allowed for dependencies
ΠΠΎΠΈ Π²ΠΎΠΏΡΠΎΡΡ:
1) Π― ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°Π» Π½Π΅ ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ?
2) ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ?
3) ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π² pyproject.toml
Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Ρ setup.py Π½Π° ΡΡΠΎ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅?
4) ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΠΈΠΈ --process-dependency-links
ΠΈ dependency_links
Π² setup.py
?
5) Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π°ΠΏΡΡΡΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ PyPi Π΄ΠΎ 1.3.4 ΠΈΠ»ΠΈ Π²ΡΡΠ΅, Π° Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Ρ
ΠΎΡΠ΅Π» Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π·Π²Π΅ΡΠ²Π»Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ 1.3.3?
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
UPD: Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ° # 4187 Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°ΡΠΊΠ½Π΅ΡΠ΅ΡΡ Π½Π° ΡΡΡ ΡΠ΅ΠΌΡ:
setup(
...
install_requires=[
"smartsheet-python-sdk==10.1.3.3",
],
dependency_links=[
'https://github.com/dmfigol/smartsheet-python-sdk/archive/no-setuptools-scm.zip#egg=smartsheet-python-sdk-10.1.3.3'
],
...
Π― ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°Π» Π½Π΅ ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ?
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ URL-Π°Π΄ΡΠ΅ΡΡ PEP 508, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ.
ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ?
Π΄Π°. Π‘ΠΌ. Π½ΠΈΠΆΠ΅.
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π² pyproject.toml, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Ρ setup.py Π½Π° ΡΡΠΎ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅?
pyproject.toml
ΡΠ»ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΠΎΠΌ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π΄Π΅Π»Ρ --process-dependency-links ΠΈ dependency_links Π² setup.py?
Π΄Π°. ΠΡΠΎ Π²ΡΡ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ # 4187.
ΠΡ ΠΎΡΠΊΠ»ΡΡΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ URL-Π°Π΄ΡΠ΅ΡΠ° PEP 508 Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π΅ Ρ
ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ°ΠΊΠ΅Ρ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΈΠ· PyPI, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΠΏΠ° ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌΡ Π²Π΅Π±-URL. ΠΠΎ ΡΡΡΠΈ, pip install spam
Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ pip ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π½ΠΈ ΠΊ ΡΠ΅ΠΌΡ, ΠΊΡΠΎΠΌΠ΅ PyPI.
Π’Π΅ΠΊΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² # 4187 ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π»ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ URL-Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΊΠ΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ· PyPI Π½Π°ΠΏΡΡΠΌΡΡ, ΡΡΠΎΠ±Ρ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ URL-Π°Π΄ΡΠ΅ΡΠΎΠ² PEP 508.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅, ΠΎΡΠ΅Π½Ρ ΡΠ΅Π½Ρ Π²Π°ΡΡ ΠΏΠΎΠΌΠΎΡΡ.
ΠΡΠΎΡ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ» Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ Π·Π°ΠΊΡΡΡΠΈΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄Π»Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ URL-Π°Π΄ΡΠ΅ΡΡ PEP 508, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ.
Π΄Π°. Π‘ΠΌ. Π½ΠΈΠΆΠ΅.
pyproject.toml
ΡΠ»ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΠΎΠΌ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅.Π΄Π°. ΠΡΠΎ Π²ΡΡ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ # 4187.
ΠΡ ΠΎΡΠΊΠ»ΡΡΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ URL-Π°Π΄ΡΠ΅ΡΠ° PEP 508 Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ°ΠΊΠ΅Ρ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΈΠ· PyPI, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΠΏΠ° ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌΡ Π²Π΅Π±-URL. ΠΠΎ ΡΡΡΠΈ,
pip install spam
Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ pip ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π½ΠΈ ΠΊ ΡΠ΅ΠΌΡ, ΠΊΡΠΎΠΌΠ΅ PyPI.Π’Π΅ΠΊΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² # 4187 ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π»ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ URL-Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΊΠ΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ· PyPI Π½Π°ΠΏΡΡΠΌΡΡ, ΡΡΠΎΠ±Ρ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ URL-Π°Π΄ΡΠ΅ΡΠΎΠ² PEP 508.