Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन कोड पैकेजिंग और पब्लिशिंग (PyPI)

पायथन पैकेज बनाकर 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 टोकन उपयोग करें (सुरक्षित)

  1. PyPI पर अकाउंट सेटिंग्स → API tokens → "Add API token"
  2. स्कोप: "Entire account" या विशिष्ट प्रोजेक्ट
  3. टोकन कॉपी करें (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 उदाहरण


            
  1. - पायथन मैथ ऑपरेटर्स: एक संपूर्ण गाइड

    आप चाहे कुछ भी बना रहे हों, यह संभावना है कि संख्याएं आपके कोड में कहीं न कहीं आएंगी। आप रेस्तरां ऐप के लिए मेनू पर आइटम्स की कीमतों को स्टोर करने के लिए संख्याओं का उपयोग कर सकते हैं या करेंसी एक्सचेंज ऐप में विभिन्न मुद्राओं के बीच रूपांतरण करने के लिए। पायथन के शुरुआती आमतौर पर पूछते हैं कि उनके

  1. पायथन इंटरप्रेटर्स: एक चरण-दर-चरण गाइड पायथन इंटरप्रेटर्स: एक चरण-दर-चरण गाइड

    पायथन प्रोग्राम कैसे एक्जीक्यूट होता है? पायथन, जावा की तरह, पूरी तरह से इंटरप्रेटेड भाषा के रूप में वर्गीकृत नहीं किया जा सकता और न ही कंपाइल्ड भाषा के रूप में। यह दोनों का थोड़ा सा है। कंपाइल्ड होने का मतलब इस उदाहरण में है किसी प्लेटफॉर्म पर निर्भर न करने वाली निचले स्तर की भाषा में अनुवादित होन

  1. - Python Module और Python Package में क्या Difference है?

    Module vs Package कोई भी Python File एक Module होती है, इसका नाम File के Base Name/Module के __name__ Property बिना .py Extension के होता है। Package Python Modules का Collection है, यानी एक Package, Python Modules की एक Directory होती है जिसमें एक Additional __init__.py File होती है। __init__.py