{"id":20975488,"url":"https://github.com/fsoky/pypitutorial","last_synced_at":"2025-05-14T14:30:51.423Z","repository":{"id":138058649,"uuid":"410267229","full_name":"Fsoky/PyPITutorial","owner":"Fsoky","description":"Как загрузить свой модуль на PyPi?","archived":false,"fork":false,"pushed_at":"2022-03-06T15:00:27.000Z","size":29,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-08-10T09:15:01.433Z","etag":null,"topics":["poetry","pypi","python","python-poetry","python-twine","twine","upload-package"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fsoky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-09-25T12:30:46.000Z","updated_at":"2024-07-09T23:28:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"1a3f1bf7-8d93-4a45-bd6a-8e513b6a41c1","html_url":"https://github.com/Fsoky/PyPITutorial","commit_stats":null,"previous_names":["fsoky/upload-library-to-pypi"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2FPyPITutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2FPyPITutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2FPyPITutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2FPyPITutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fsoky","download_url":"https://codeload.github.com/Fsoky/PyPITutorial/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225297656,"owners_count":17452010,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["poetry","pypi","python","python-poetry","python-twine","twine","upload-package"],"created_at":"2024-11-19T04:45:25.544Z","updated_at":"2024-11-19T04:45:26.014Z","avatar_url":"https://github.com/Fsoky.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Как загрузить свой модуль на PyPI?\nДля начала вам нужно написать модуль, который вы будете публиковать. \n\nТакже я вам советую для начала опубликовать модуль на **[Test-PyPI](https://test.pypi.org)**, потому что у вас могут возникнуть проблемы в коде, баги, которые вы не заметили. Тем самым вы сможете уберечь себя от *лишних релизов* на PyPI.\n\nЗарегистрируйтесь на **[Test-PyPI](https://test.pypi.org)** и **[PyPI](https://pypi.org)**, регистрация простая.\n\n### Содержание\n- [Установка с помощью Poetry](https://github.com/Fsoky/Upload-library-to-PyPI#Poetry-Python)\n- [Установка с помощью Twine](https://github.com/Fsoky/Upload-library-to-PyPI#Twine)\n\n# Poetry - Python\n1. **🥑 Установка poetry**\n2. **🍍 Иницилизация, подготовка к публикации**\n3. **🍑 Публикация модуля на [Test-PyPI](https://test.pypi.org)**\n4. **🍇 Публикация модуля на [PyPI](https://pypi.org)**\n\n## 🥑 Установка poetry\n**[Официальный сайт Poetry](https://python-poetry.org/)**, здесь вы сможете более подробней разобраться с *poetry*\n\nСпособы установки *poetry*\n- **🥀 cURL**\n```\n$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -\n```\n- **🍃 PowerShell**\n```\n$ (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -\n```\n- **🍋 pip**\n```\n$ pip install --user poetry\n```\n\n## 🍍 Иницилизация, подготовка к публикации\nОткрываем **CMD**, переходим в директорию где находится *папка/файл* и вводим команду: **`poetry init`**\n```py\n[Package name]: название вашего файла или папки, в которой хранятся файлы с кодом. По умолчанию - текущая директорию\n[Version] (0.1.0): желаемае версия проекта, по умолчанию - 0.1.0\n[Description]: Небольшое описание проекта\n[Author] (You \u003cyouremail@example.com\u003e): автор(ы) проекта\n[License]: текстовый документ с описанием лицензии, по умолчанию - ничего\n[Compatible Python version] (3.x): Желаемая версия Python, по умолчанию - текущая\n[... main dependencies]: Хотите ли определить основные зависимости проекта? Зависимости, это доп. модули, которые будут устанавливаться с вашим модулем\n```\n\nНа счет *зависимостей*, если вы импортируете различные модули в своем проекте, советую указать их в *зависимостях* (кроме дефолтных), тем самым, если у пользователя устанавливающего ваш модуль не будет к примеру модуля `requests`, то он автоматический установится вместе с вашим модулем, при условии того, если вы указали его в *зависимостях*.\n\nВ директории создался файл `pyproject.toml`, вы можете открыть его в редакторе и добавить пару строк. Например, можно указать *большое* описание для проекта, для этого нужно написать строчку `readme = \"файл с описанием (к примеру README.md)\"`, также вы можете указать ключевые слова `keywords = [\"список из максимум 5 ключевых слов\"]`, можно указать свой репозиторий на GitHub `repository = \"ссылка на ваш репозиторий\"`, или страницу проекта `homepage = \"ссылка на страницу\"`. Подробней в [оф. документации Poetry](https://python-poetry.org/docs/)\n\n## 🍑 Публикация модуля на [Test-PyPI](https://test.pypi.org)\nВот и пришло время опубликовать модуль в открытый доступ! \\\nЧтобы опубликовать модуль на *Test-PyPI* нужно прописать следующуе:\n\n```py\npoetry config repositories.testpypi https://test.pypi.org/legacy/\n```\n\n```py\npoetry publish -r testpypi --username YOUR_USERNAME --password YOUR_PASSWORD --build\n```\n\n## 🍇 Публикация модуля на [PyPI](https://pypi.org)\nВсе проще чем кажется. Но прежде чем опубликовать модуль на основной PyPI, советую опубликовать его на [test.pypi.org](https://test.pypi.org) и проверить на наличие багов, ошибок в коде и т.п.\n\n```py\npoetry publish --username YOUR_USERNAME --password YOUR_PASSWORD --build\n```\n\n# Twine\n1. **❤ Установка twine**\n2. **🧡 Создание setup.py \u0026 setup.cfg**\n3. **💛 Иницилизация проекта**\n4. **💜 Публикация на Test-PyPi и PyPi**\n\n## ❤ Установка twine\n[GitHub Twine](https://github.com/tweecode/twine) \\\nСпособы установки *Twine*\n- **pip**\n```\n$ pip install twine\n```\n- **Windows Installer** \\\n[Скачать Twine для Windows](https://github.com/tweecode/twine/releases/tag/v1.4.3)\n- **OS X Installer** \\\n[Скачать Twine для OS X](https://twinery.org/)\n\n## 🧡 Создание setup.py \u0026 setup.cfg\nДля начала создадим рабочую директорию.\n```\n$ md workplace\n$ cd workplace\n```\n\nПредставим структуру директории.\n```\n[workplace (наша рабочая директория)]\n|\n|___[package (наш пакет с модулями)]\n    |\n    |__...\n```\n\nВ рабочей директории нужно создать два файла, которые будут отвечать за настройку нашего проекта, для того чтобы в дальнешейм опубликовать его на PyPi. \\\n*Примеры приведенные ниже использовать без точки (.) в конце*\n\u003cdetails\u003e\u003csummary\u003eСоздание файла в консоли, на Windows\u003c/summary\u003e\n   \n   1. echo \u003e setup.cfg.\n   2. echo \u003e setup.py.\n   \n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eСоздание файла в консоли, на Linux\u003c/summary\u003e\n   \n   1. touch setup.cfg.\n   2. touch setup.py.\n   \n\u003c/details\u003e\n\n### setup.cfg\n```cfg\n[egg_info]\ntag_build = \ntag_date = 0\n```\n\n### setup.py\n```py\nfrom setuptools import setup, find_packages # pip install setuptools\nfrom io import open\n\n\ndef read(filename):\n   \"\"\"Прочитаем наш README.md для того, чтобы установить большое описание.\"\"\"\n   with open(filename, \"r\", encoding=\"utf-8\") as file:\n      return file.read()\n\n\nsetup(name=\"Название твоего пакета\",\n   version=\"0.1\", # Версия твоего проекта. ВАЖНО: менять при каждом релизе\n   description=\"Короткое описание твоего проекта на PyPi\",\n   long_description=read(\"README.md\"), # Здесь можно прописать README файл с длинным описанием\n   long_description_content_type=\"text/markdown\", # Тип контента, в нашем случае text/markdown\n   author=\"Имя автора\",\n   author_email=\"почта_автора@gmail.com\",\n   url=\"https://github.com/Fsoky/Upload-library-to-PyPI\", # Страница проекта\n   keywords=\"api some_keyword tools\", # Ключевые слова для упрощеннего поиска пакета на PyPi\n   packages=find_packages() # Ищем пакеты, или можно передать название списком: [\"package_name\"]\n)\n```\n\n## 💛 Иницилизация проекта\nЧтобы иницилизировать проект, в консоли нужно прописать:\n```\n$ python setup.py sdist\n```\nПосле чего в нашей рабочей директории создадуться папки: `dist`, `package_name.egg_info`. \\\nВ `.egg_info`, вы можете найти небольшую информацию о своем проекте, в `dist` хранится архив, который будет публиковаться на PyPi.\n\n## 💜 Публикация на Test-PyPi и PyPi\nЧтобы опубликовать проект, воспользуемся утилитой *Twine*.\n\n- Публикация на **[Test-PyPI](https://test.pypi.org)**\n```\n$ twine upload -r testpypi dist/*\n```\n- Публикация на **[PyPI](https://pypi.org)**\n```\n$ twine upload dist/*\n```\n\nПосле этой команды, вы увидите:\n```\nusername: Ваш ник на PyPi\npassword: Сюда вводите ваш пароль (его не будет видно)\n```\nВ случае успешной публикации, вы получите ссылку на PyPi с проектом.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffsoky%2Fpypitutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffsoky%2Fpypitutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffsoky%2Fpypitutorial/lists"}