Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

πŸπŸ“¦ Π’Π°Ρˆ ΠΊΠΎΠ΄ достоин PyPI: ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Python-ΠΏΠ°ΠΊΠ΅Ρ‚

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ инструкция ΠΏΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Python-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π° PyPI. Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ свой ΠΏΠ°ΠΊΠ΅Ρ‚ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» взят ΠΈΠ· нашСй email-рассылки, посвящСнной Python. ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ дайдТСст. πŸ“§ ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ (function () { let link = document .getElementById ("15b7bade-59ea-4599-9366-a8b8e60d6ba2-https://proglib.io/w/edaee37b-2"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function
ОглавлСниС

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ инструкция ΠΏΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Python-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π° PyPI. Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ свой ΠΏΠ°ΠΊΠ΅Ρ‚ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» взят ΠΈΠ· нашСй email-рассылки, посвящСнной Python. ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ дайдТСст.

πŸ“§ ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ

(function () { let link = document .getElementById ("15b7bade-59ea-4599-9366-a8b8e60d6ba2-https://proglib.io/w/edaee37b-2"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();

Майк Дрисколл, извСстный популяризатор Python, написал ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π³Π°ΠΉΠ΄ ΠΏΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ PyPI. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ выглядит Ρ‚Π°ΠΊ:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ структуры ΠΏΠ°ΠΊΠ΅Ρ‚Π°

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ src, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ размСститС Π²Π°ΡˆΡƒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ. Π’ эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ помСститС __init__.py – ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ этот Ρ„Π°ΠΉΠ» просто Π΄Π°Π΅Ρ‚ Python ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ° являСтся ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
  2. Π—Π°Ρ‚Π΅ΠΌ помСститС Π² ΠΏΠ°ΠΏΠΊΡƒ всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ» Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ, pyproject.toml, README.md ΠΈ ΠΏΠ°ΠΏΠΊΡƒ tests.

Π’Ρ‹Π±ΠΎΡ€ систСмы сборки

Π’ Ρ„Π°ΠΉΠ»Π΅ pyproject.toml ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ систСму сборки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Hatchling, setuptools, Flit, PDM).

Настройка ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…

Π’ pyproject.toml Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ – Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π²Π΅Ρ€ΡΠΈΡŽ, Π°Π²Ρ‚ΠΎΡ€ΠΎΠ², описаниС, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ вСрсии Python, классификаторы ΠΈ URL-адрСса.

   ΠŸΡ€ΠΈΠΌΠ΅Ρ€ заполнСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ заполнСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…

🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ Python

ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»

🐍🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° README ΠΈ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ README.md с инструкциями ΠΏΠΎ установкС, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ.
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ для вашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

ГСнСрация ΠΏΠ°ΠΊΠ΅Ρ‚Π°

  1. УстановитС build: python3 -m pip install --upgrade build
  2. ЗапуститС сборку: python3 -m build
  3. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ dist появятся Ρ„Π°ΠΉΠ»Ρ‹ .whl ΠΈ .tar.gz

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° PyPI

  1. Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ Π½Π° TestPyPI (https://test.pypi.org)
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ API-Ρ‚ΠΎΠΊΠ΅Π½ Π² настройках Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°
  3. УстановитС twine: python3 -m pip install --upgrade twine
  4. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π° TestPyPI: python3 -m twine upload --repository testpypi dist/*
  5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ установку ΠΏΠ°ΠΊΠ΅Ρ‚Π° с TestPyPI

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ Π½Π° основном PyPI

  1. Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ Π½Π° PyPI (https://pypi.org)
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ API-Ρ‚ΠΎΠΊΠ΅Π½
  3. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚: python -m twine upload dist/*
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ установку с основного PyPI

Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

  1. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя для ΠΏΠ°ΠΊΠ΅Ρ‚Π°.
  2. Π’Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈ README.
  3. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ протСстируйтС ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π° TestPyPI ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Π½Π° основном PyPI.
  4. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваш ΠΏΠ°ΠΊΠ΅Ρ‚ совмСстим с заявлСнными вСрсиями Python.

***

Π‘Ρ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅