पायथन पैकेज बनाकर PyPI (Python Package Index) पर प्रकाशित करना सरल प्रक्रिया है।
चरण 1: पैकेज संरचना तैयार करें
my_package/ ├── my_package/ │ ├── __init__.py │ └── module.py ├── tests/ ├── README.md ├── LICENSE ├── setup.py ├── setup.cfg ├── pyproject.toml (आधुनिक) └── requirements.txt
न्यूनतम फाइल्स
# my_package/__init__.py
__version__ = "0.1.0"
# my_package/module.py
def hello():
return "Hello from my_package!"
चरण 2: setup.py / pyproject.toml कॉन्फिगर करें
पारंपरिक setup.py
from setuptools import setup, find_packages
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
setup(
name="my_package",
version="0.1.0",
author="आपका नाम",
author_email="you@example.com",
description="एक छोटा उदाहरण पैकेज",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/username/my_package",
packages=find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires=">=3.6",
install_requires=[
"requests>=2.25.0",
],
extras_require={
"dev": ["pytest", "black", "flake8"],
},
)
आधुनिक pyproject.toml (पायथन 3.12+ अनुशंसित)
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "my_package"
version = "0.1.0"
description = "एक छोटा उदाहरण पैकेज"
readme = "README.md"
authors = [{name = "आपका नाम", email = "you@example.com"}]
license = {text = "MIT"}
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
requires-python = ">=3.6"
dependencies = ["requests>=2.25.0"]
[project.optional-dependencies]
dev = ["pytest", "black", "flake8"]
[project.urls]
Homepage = "https://github.com/username/my_package"
Repository = "https://github.com/username/my_package"
चरण 3: बिल्ड टूल्स इंस्टॉल/अपग्रेड
pip install --upgrade pip setuptools wheel twine build
चरण 4: पैकेज बिल्ड करें
# आधुनिक तरीका (build मॉड्यूल) python -m build # पारंपरिक तरीका python setup.py sdist bdist_wheel
आउटपुट dist/ फोल्डर में:
my_package-0.1.0.tar.gz(सोर्स डिस्ट्रीब्यूशन)my_package-0.1.0-py3-none-any.whl(व्हील - तेज इंस्टॉल)
चरण 5: स्थानीय टेस्ट इंस्टॉल
# वर्चुअल एनवायरनमेंट बनाएं python -m venv test_env source test_env/bin/activate # Windows: test_env\Scripts\activate # लोकल व्हील इंस्टॉल pip install dist/my_package-0.1.0-py3-none-any.whl # टेस्ट python -c "import my_package; print(my_package.module.hello())" # अनइंस्टॉल pip uninstall my_package
चरण 6: PyPI पर प्रकाशित करें
TestPyPI पर पहले टेस्ट करें
# TestPyPI पर अपलोड twine upload --repository testpypi dist/* # TestPyPI से इंस्टॉल टेस्ट pip install --index-url https://test.pypi.org/simple/ my_package
वास्तविक PyPI पर अपलोड
twine upload dist/* # यूज़रनेम और पासवर्ड/टोकन दर्ज करें
API टोकन उपयोग करें (सुरक्षित)
- PyPI पर अकाउंट सेटिंग्स → API tokens → "Add API token"
- स्कोप: "Entire account" या विशिष्ट प्रोजेक्ट
- टोकन कॉपी करें (pypi-AgEIcHlwaS5vcmc...)
twine upload -u __token__ -p pypi-AgEIcHlwaS5vcmc... dist/*
संस्करण प्रबंधन
# setup.py में version पढ़ें
import re
with open("my_package/__init__.py") as f:
version = re.search(r'__version__ = "(.+)"', f.read()).group(1)
setup(version=version, ...)
GitHub Actions से ऑटोमेटिक पब्लिश
# .github/workflows/publish.yml
name: Publish to PyPI
on:
release:
types: [published]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install build tools
run: pip install build twine
- name: Build
run: python -m build
- name: Publish
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: twine upload dist/*
सर्वोत्तम अभ्यास
- सिमेंटिक वर्जनिंग: MAJOR.MINOR.PATCH
- README.md में इंस्टॉलेशन, उपयोग, लाइसेंस
- LICENSE फाइल शामिल करें (MIT, Apache-2.0, आदि)
- CHANGELOG.md रखें
MANIFEST.inसे नॉन-पायथन फाइल्स शामिल करें- टाइप हिंट्स जोड़ें (
py.typedमार्कर) - टेस्ट्स शामिल करें (
pytest)
MANIFEST.in उदाहरण