PyPI द्वारे पायथन पॅकेजेस वितरित करण्यासाठी सर्वसमावेशक मार्गदर्शक, ज्यामध्ये आवृत्ती व्यवस्थापन, साधने आणि जागतिक विकासकांसाठी कार्यप्रवाह समाविष्ट आहेत.
पायथन पॅकेज वितरण: PyPI प्रकाशन आणि आवृत्ती व्यवस्थापन
पायथनची विस्तृत इकोसिस्टम पॅकेजेसच्या मोठ्या संग्रहाद्वारे चालते, जे पायथन पॅकेज इंडेक्स (PyPI) द्वारे सहज उपलब्ध आहेत. हे मार्गदर्शक PyPI द्वारे तुमचे स्वतःचे पायथन पॅकेजेस कसे वितरित करावे याचे सर्वसमावेशक विहंगावलोकन प्रदान करते, जेणेकरून ते जगभरातील विकासकांना उपलब्ध होतील. आम्ही आवश्यक साधने, आवृत्ती व्यवस्थापनासाठी सर्वोत्तम पद्धती, आणि उच्च-गुणवत्तेचे पायथन पॅकेजेस तयार करण्यासाठी आणि प्रकाशित करण्यासाठी कार्यप्रवाह शोधू.
तुमचे पायथन पॅकेज का वितरित करावे?
तुमचे पायथन पॅकेज वितरित केल्याने अनेक फायदे मिळतात:
- तुमचे काम शेअर करणे: इतर विकासकांना तुमचा कोड सहजपणे पुन्हा वापरण्याची संधी मिळते, ज्यामुळे सहयोग आणि नवनिर्मितीला चालना मिळते. कल्पना करा की एक जागतिक टीम पायथनमध्ये तयार केलेली तुमची विशेष डेटा विश्लेषण साधने वापरत आहे.
- डिपेन्डन्सी व्यवस्थापन: इतर प्रोजेक्ट्समधील डिपेन्डन्सीज व्यवस्थापित करण्याची प्रक्रिया सोपी करते. तुमचे पॅकेज एकाच कमांडने इन्स्टॉल केले जाऊ शकते, त्याच्या सर्व डिपेन्डन्सीजसह.
- ओपन सोर्स योगदान: तुम्हाला ओपन-सोर्स समुदायात योगदान देण्यास आणि तुमच्या कामासाठी ओळख मिळविण्यात सक्षम करते. अनेक महत्त्वपूर्ण सॉफ्टवेअर घटक हे जगभरातील विकासकांद्वारे सांभाळलेले ओपन-सोर्स पॅकेजेस आहेत.
- आवृत्ती नियंत्रण आणि अद्यतने: आवृत्त्या व्यवस्थापित करणे, अद्यतने रिलीज करणे आणि बगचे निराकरण करण्याचा एक संरचित मार्ग प्रदान करते. हे सुनिश्चित करते की वापरकर्त्यांना तुमच्या पॅकेजच्या नवीनतम आणि सर्वात विश्वसनीय आवृत्तीमध्ये नेहमी प्रवेश असेल.
- सोपे इन्स्टॉलेशन: वापरकर्त्यांसाठी `pip install your-package-name` द्वारे इन्स्टॉलेशन सोपे करते.
पायथन पॅकेज वितरणासाठी आवश्यक साधने
पायथन पॅकेजेस तयार करण्यासाठी आणि वितरित करण्यासाठी अनेक साधने आवश्यक आहेत:
- setuptools: पॅकेज मेटाडेटा, जसे की नाव, आवृत्ती, डिपेन्डन्सीज आणि एंट्री पॉइंट्स परिभाषित करण्यासाठी एक मोठ्या प्रमाणावर वापरली जाणारी लायब्ररी आहे. पायथन प्रोजेक्ट्सच्या पॅकेजिंगसाठी हे एक प्रमाणित मानक आहे.
- wheel: एक वितरण स्वरूप जे सोर्स वितरणाच्या तुलनेत अधिक कार्यक्षम आणि विश्वसनीय इन्स्टॉलेशन प्रक्रिया प्रदान करते. व्हील्स पूर्व-तयार वितरण आहेत जे संकलनाची आवश्यकता न ठेवता इन्स्टॉल केले जाऊ शकतात.
- twine: तुमचे पॅकेज PyPI वर सुरक्षितपणे अपलोड करण्यासाठी एक साधन. ट्वाइन तुमच्या क्रेडेन्शियल्स आणि पॅकेज डेटाला ट्रान्समिशन दरम्यान एन्क्रिप्ट करते, ज्यामुळे इव्हसड्रॉपिंग आणि मॅन-इन-द-मिडल हल्ल्यांपासून संरक्षण होते.
- venv/virtualenv: ही वेगळी (isolated) पायथन एनवायरनमेंट तयार करण्यासाठीची साधने आहेत. डिपेन्डन्सीज व्यवस्थापित करण्यासाठी आणि विविध प्रोजेक्ट्समधील संघर्ष टाळण्यासाठी व्हर्च्युअल एनवायरनमेंट वापरणे महत्त्वाचे आहे.
तुमचा प्रोजेक्ट सेट करणे
तुम्ही तुमचे पॅकेज वितरित करण्यापूर्वी, तुम्हाला तुमचा प्रोजेक्ट योग्यरित्या संरचित करणे आवश्यक आहे.
प्रोजेक्ट स्ट्रक्चरचे उदाहरण
my_package/ ├── my_package/ │ ├── __init__.py │ ├── module1.py │ └── module2.py ├── tests/ │ ├── __init__.py │ ├── test_module1.py │ └── test_module2.py ├── README.md ├── LICENSE ├── setup.py └── .gitignore
स्पष्टीकरण:
- my_package/: तुमच्या पॅकेजचा सोर्स कोड असलेली मुख्य डिरेक्टरी.
- my_package/__init__.py: `my_package` डिरेक्टरीला पायथन पॅकेज बनवते. ती रिकामी असू शकते किंवा त्यात इनिशिएलायझेशन कोड असू शकतो.
- my_package/module1.py, my_package/module2.py: वास्तविक कोड असलेले तुमचे पायथन मॉड्यूल्स.
- tests/: तुमच्या युनिट टेस्ट्स असलेली डिरेक्टरी. तुमच्या पॅकेजची गुणवत्ता आणि विश्वसनीयता सुनिश्चित करण्यासाठी टेस्ट्स लिहिणे महत्त्वाचे आहे.
- README.md: तुमच्या पॅकेजचे वर्णन, वापराच्या सूचना आणि इतर संबंधित माहिती देणारी मार्कडाउन फाईल. वापरकर्ते PyPI वर हेच सर्वप्रथम पाहतात.
- LICENSE: तुमचे पॅकेज ज्या लायसन्स अंतर्गत वितरित केले आहे ती असलेली फाईल (उदा. MIT, Apache 2.0, GPL). इतर तुमचा कोड कसा वापरू शकतात हे निर्दिष्ट करण्यासाठी योग्य लायसन्स निवडणे आवश्यक आहे.
- setup.py: मुख्य कॉन्फिगरेशन फाईल जी तुमच्या पॅकेजचा मेटाडेटा आणि बिल्ड सूचना परिभाषित करते.
- .gitignore: Git ने दुर्लक्षित कराव्यात अशा फाइल्स आणि डिरेक्टरीज निर्दिष्ट करते (उदा. तात्पुरत्या फाइल्स, बिल्ड आर्टिफॅक्ट्स).
`setup.py` फाईल तयार करणे
`setup.py` फाईल ही तुमच्या पॅकेज वितरणाचे केंद्रस्थान आहे. यात तुमच्या पॅकेजविषयी मेटाडेटा आणि ते तयार व इन्स्टॉल करण्याच्या सूचना असतात. येथे एक उदाहरण आहे:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="my_package", # तुमच्या पॅकेजच्या नावाने बदला
version="0.1.0",
author="Your Name", # तुमच्या नावाने बदला
author_email="your.email@example.com", # तुमच्या ईमेलने बदला
description="एक छोटे उदाहरण पॅकेज",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/yourusername/my_package", # तुमच्या रिपॉझिटरी URL ने बदला
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
install_requires=[
"requests", # उदाहरण डिपेन्डन्सी
],
)
स्पष्टीकरण:
- name: तुमच्या पॅकेजचे नाव, जे PyPI वर वापरले जाईल. एक अद्वितीय आणि वर्णनात्मक नाव निवडा.
- version: तुमच्या पॅकेजचा आवृत्ती क्रमांक. सिमेंटिक व्हर्जनिंगचे अनुसरण करा (खाली पहा).
- author, author_email: तुमचे नाव आणि ईमेल पत्ता.
- description: तुमच्या पॅकेजचे संक्षिप्त वर्णन.
- long_description: एक मोठे, अधिक तपशीलवार वर्णन, जे सामान्यतः तुमच्या `README.md` फाईलमधून वाचले जाते.
- long_description_content_type: तुमच्या दीर्घ वर्णनाचे स्वरूप निर्दिष्ट करते (उदा. "text/markdown").
- url: तुमच्या पॅकेजच्या होमपेजची URL (उदा. GitHub रिपॉझिटरी).
- packages: तुमच्या वितरणात समाविष्ट करायच्या पॅकेजेसची सूची. `setuptools.find_packages()` तुमच्या प्रोजेक्टमधील सर्व पॅकेजेस आपोआप शोधते.
- classifiers: मेटाडेटा जो वापरकर्त्यांना PyPI वर तुमचे पॅकेज शोधण्यात मदत करतो. Trove Classifiers च्या सूचीमधून योग्य क्लासिफायर्स निवडा. समर्थित पायथन आवृत्त्या, ऑपरेटिंग सिस्टम आणि लायसन्ससाठी क्लासिफायर्स समाविष्ट करण्याचा विचार करा.
- python_requires: तुमचे पॅकेज वापरण्यासाठी आवश्यक असलेली किमान पायथन आवृत्ती निर्दिष्ट करते.
- install_requires: तुमच्या पॅकेजला आवश्यक असलेल्या डिपेन्डन्सीजची सूची. तुमचे पॅकेज इन्स्टॉल झाल्यावर या डिपेन्डन्सीज आपोआप इन्स्टॉल केल्या जातील.
आवृत्ती व्यवस्थापन: सिमेंटिक व्हर्जनिंग
सिमेंटिक व्हर्जनिंग (SemVer) ही एक मोठ्या प्रमाणावर स्वीकारलेली व्हर्जनिंग योजना आहे जी तुमच्या पॅकेजमधील बदलांचे स्वरूप स्पष्ट आणि सातत्यपूर्णपणे कळवण्याचा एक मार्ग प्रदान करते.
SemVer आवृत्ती क्रमांकामध्ये तीन भाग असतात: MAJOR.MINOR.PATCH.
- MAJOR: जेव्हा तुम्ही विसंगत API बदल करता तेव्हा वाढवला जातो. हे एक महत्त्वपूर्ण बदल दर्शवते ज्यासाठी वापरकर्त्यांना त्यांचा कोड अपडेट करण्याची आवश्यकता असू शकते.
- MINOR: जेव्हा तुम्ही बॅकवर्ड्स कंपॅटिबल पद्धतीने कार्यक्षमता जोडता तेव्हा वाढवला जातो. हे नवीन वैशिष्ट्ये किंवा सुधारणा दर्शवते जे विद्यमान कोडला तोडत नाहीत.
- PATCH: जेव्हा तुम्ही बॅकवर्ड्स कंपॅटिबल बग निराकरणे करता तेव्हा वाढवला जातो. हे छोट्या निराकरणांसाठी आहे जे नवीन वैशिष्ट्ये जोडत नाहीत किंवा विद्यमान कार्यक्षमता तोडत नाहीत.
उदाहरणे:
- 1.0.0: प्रारंभिक प्रकाशन.
- 1.1.0: विद्यमान कोड न तोडता एक नवीन वैशिष्ट्य जोडले.
- 1.0.1: 1.0.0 प्रकाशनातील एक बग निश्चित केला.
- 2.0.0: विसंगत API बदल केले.
SemVer वापरल्याने वापरकर्त्यांना तुमच्या पॅकेजच्या नवीन आवृत्तीमध्ये अपग्रेड करण्याचा परिणाम समजण्यास मदत होते.
तुमचे पॅकेज तयार करणे (बिल्ड करणे)
एकदा तुमची `setup.py` फाईल कॉन्फिगर झाल्यावर, तुम्ही तुमचे पॅकेज तयार करू शकता.
- व्हर्च्युअल एनवायरनमेंट तयार करा: तुमच्या पॅकेजच्या डिपेन्डन्सीज वेगळ्या करण्यासाठी व्हर्च्युअल एनवायरनमेंट तयार करण्याची शिफारस केली जाते. `python3 -m venv .venv` (किंवा `virtualenv .venv`) वापरा आणि नंतर ते सक्रिय करा (Linux/macOS वर `source .venv/bin/activate`, Windows वर `.venv\Scripts\activate`).
- बिल्ड डिपेन्डन्सीज इन्स्टॉल करा: `pip install --upgrade setuptools wheel` चालवा.
- पॅकेज तयार करा: `python setup.py sdist bdist_wheel` चालवा. ही कमांड `dist` डिरेक्टरीमध्ये दोन वितरण फाइल्स तयार करते: एक सोर्स वितरण (sdist) आणि एक व्हील वितरण (bdist_wheel).
`sdist` मध्ये तुमचा सोर्स कोड आणि `setup.py` फाईल असते. `bdist_wheel` हे एक पूर्व-तयार वितरण आहे जे अधिक वेगाने इन्स्टॉल केले जाऊ शकते.
तुमचे पॅकेज PyPI वर प्रकाशित करणे
तुम्ही तुमचे पॅकेज प्रकाशित करण्यापूर्वी, तुम्हाला PyPI (https://pypi.org/) वर एक खाते तयार करावे लागेल आणि एक API टोकन तयार करावा लागेल. हे टोकन तुमचे अपलोड प्रमाणित करण्यासाठी वापरले जाईल.
- PyPI वर नोंदणी करा: https://pypi.org/account/register/ वर जा आणि एक खाते तयार करा.
- API टोकन तयार करा: https://pypi.org/manage/account/ वर जा, "API tokens" विभागापर्यंत खाली स्क्रोल करा आणि एक नवीन टोकन तयार करा. हे टोकन सुरक्षितपणे साठवा, कारण तुम्हाला तुमचे पॅकेज अपलोड करण्यासाठी याची आवश्यकता असेल.
- Twine इन्स्टॉल करा: `pip install twine` चालवा.
- तुमचे पॅकेज अपलोड करा: `twine upload dist/*` चालवा. तुम्हाला तुमच्या वापरकर्तानावासाठी (
__token__) आणि पासवर्डसाठी (तुम्ही तयार केलेला API टोकन) विचारले जाईल.
महत्त्वाची सुरक्षा सूचना: तुमचा API टोकन कधीही तुमच्या रिपॉझिटरीमध्ये कमिट करू नका. तो सुरक्षितपणे साठवा आणि अपलोड प्रक्रियेदरम्यान त्यात प्रवेश करण्यासाठी एनवायरनमेंट व्हेरिएबल्स किंवा इतर सुरक्षित पद्धती वापरा.
तुमच्या पॅकेज इन्स्टॉलेशनची चाचणी करणे
तुमचे पॅकेज प्रकाशित केल्यानंतर, ते योग्यरित्या इन्स्टॉल केले जाऊ शकते याची चाचणी करणे आवश्यक आहे.
- एक नवीन व्हर्च्युअल एनवायरनमेंट तयार करा: हे सुनिश्चित करते की तुम्ही स्वच्छ वातावरणात इन्स्टॉलेशनची चाचणी करत आहात.
- तुमचे पॅकेज इन्स्टॉल करा: `pip install your-package-name` चालवा.
- तुमचे पॅकेज इम्पोर्ट करा आणि वापरा: पायथन इंटरप्रिटरमध्ये, तुमचे पॅकेज इम्पोर्ट करा आणि ते अपेक्षेप्रमाणे काम करते का ते तपासा.
सतत एकीकरण आणि सतत उपयोजन (CI/CD)
तुमचे पॅकेज तयार करणे, चाचणी करणे आणि प्रकाशित करण्याची प्रक्रिया स्वयंचलित करण्यासाठी, तुम्ही GitHub Actions, GitLab CI, किंवा Travis CI सारख्या CI/CD साधनांचा वापर करू शकता.
येथे GitHub Actions वर्कफ्लोचे एक उदाहरण आहे जे तुमचे पॅकेज तयार करते आणि PyPI वर प्रकाशित करते:
name: PyPI वर प्रकाशित करा
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: पायथन 3.x सेट करा
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: डिपेन्डन्सीज इन्स्टॉल करा
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
- name: पॅकेज तयार करा
run: python setup.py sdist bdist_wheel
- name: पॅकेज PyPI वर प्रकाशित करा
run: |
twine upload dist/* \
-u __token__ \
-p ${{ secrets.PYPI_API_TOKEN }}
स्पष्टीकरण:
- जेव्हा GitHub वर नवीन प्रकाशन (release) प्रकाशित होते तेव्हा हा वर्कफ्लो सुरू होतो.
- तो कोड चेकआउट करतो, पायथन सेट करतो, डिपेन्डन्सीज इन्स्टॉल करतो, पॅकेज तयार करतो आणि ते PyPI वर अपलोड करतो.
secrets.PYPI_API_TOKENहे एक GitHub सिक्रेट आहे जे तुमचा PyPI API टोकन साठवते. तुम्हाला हे सिक्रेट तुमच्या GitHub रिपॉझिटरी सेटिंग्जमध्ये कॉन्फिगर करणे आवश्यक आहे.
पायथन पॅकेज वितरणासाठी सर्वोत्तम पद्धती
- सर्वसमावेशक दस्तऐवजीकरण लिहा: तपशीलवार `README.md` फाईल, तसेच Sphinx सारख्या साधनांचा वापर करून API दस्तऐवजीकरण समाविष्ट करा. तुमचे पॅकेज वापरण्यास सोपे करण्यासाठी स्पष्ट आणि संपूर्ण दस्तऐवजीकरण महत्त्वाचे आहे.
- युनिट टेस्ट्स लिहा: तुमच्या कोडची गुणवत्ता आणि विश्वसनीयता सुनिश्चित करण्यासाठी त्याची कसून चाचणी घ्या. pytest किंवा unittest सारख्या टेस्टिंग फ्रेमवर्कचा वापर करा.
- PEP 8 शैली मार्गदर्शक तत्त्वांचे पालन करा: सातत्यपूर्ण आणि वाचनीय कोड सुनिश्चित करण्यासाठी पायथन एनहान्समेंट प्रपोजल 8 (PEP 8) शैली मार्गदर्शकाचे पालन करा.
- लायसन्स वापरा: इतर तुमचा कोड कसा वापरू शकतात हे निर्दिष्ट करण्यासाठी योग्य ओपन-सोर्स लायसन्स निवडा.
- तुमच्या डिपेन्डन्सीज अद्ययावत ठेवा: बग निराकरणे, सुरक्षा पॅचेस आणि नवीन वैशिष्ट्यांचा लाभ घेण्यासाठी तुमच्या पॅकेजच्या डिपेन्डन्सीज नियमितपणे अपडेट करा.
- व्हर्च्युअल एनवायरनमेंट वापरा: डिपेन्डन्सीज वेगळ्या ठेवण्यासाठी नेहमी व्हर्च्युअल एनवायरनमेंटमध्ये तुमचे पॅकेज विकसित आणि चाचणी करा.
- आंतरराष्ट्रीयीकरण (i18n) आणि स्थानिकीकरण (l10n) याचा विचार करा: जर तुमचे पॅकेज वापरकर्त्यांना दिसणारे मजकूर किंवा डेटा हाताळत असेल, तर ते वेगवेगळ्या भाषा आणि प्रदेशांसाठी जुळवून घेण्यायोग्य बनवण्याचा विचार करा. हे तुमचा संभाव्य वापरकर्ता आधार जागतिक स्तरावर वाढवते. Babel सारखी साधने यात मदत करू शकतात.
- वेगवेगळ्या टाइम झोन आणि चलनांना हाताळा: जर तुमचे पॅकेज तारखा, वेळा किंवा आर्थिक व्यवहारांशी संबंधित असेल, तर जगभरातील वेगवेगळ्या टाइम झोन आणि चलनांची नोंद घ्या. या गुंतागुंतींना योग्यरित्या हाताळण्यासाठी योग्य लायब्ररी आणि API वापरा.
- स्पष्ट त्रुटी संदेश द्या: माहितीपूर्ण त्रुटी संदेश लिहा जे वापरकर्त्यांना काय चूक झाली आणि ती कशी दुरुस्त करावी हे समजण्यास मदत करतात. शक्य असल्यास हे त्रुटी संदेश वेगवेगळ्या भाषांमध्ये अनुवादित करा.
- सुलभतेचा विचार करा: तुमच्या पॅकेजचा इंटरफेस आणि दस्तऐवजीकरण डिझाइन करताना दिव्यांग वापरकर्त्यांचा विचार करा. तुमचे पॅकेज प्रत्येकासाठी वापरण्यायोग्य आहे हे सुनिश्चित करण्यासाठी सुलभता मार्गदर्शक तत्त्वांचे पालन करा.
प्रगत विषय
- नेमस्पेस पॅकेजेस: तुम्हाला एका पायथन पॅकेजला अनेक डिरेक्टरीजमध्ये किंवा अनेक वितरणांमध्ये विभागण्याची परवानगी देतात.
- एंट्री पॉइंट्स: तुम्हाला फंक्शन किंवा क्लासेस परिभाषित करण्याची परवानगी देतात जे इतर पॅकेजेसमधून किंवा कमांड लाइनवरून कॉल केले जाऊ शकतात.
- डेटा फाइल्स: तुम्हाला तुमच्या वितरणात नॉन-पायथन फाइल्स (उदा. डेटा फाइल्स, कॉन्फिगरेशन फाइल्स) समाविष्ट करण्याची परवानगी देतात.
- सशर्त डिपेन्डन्सीज: तुम्हाला अशा डिपेन्डन्सीज निर्दिष्ट करण्याची परवानगी देतात ज्या केवळ विशिष्ट परिस्थितीत आवश्यक असतात (उदा. विशिष्ट ऑपरेटिंग सिस्टमवर).
निष्कर्ष
PyPI वर तुमचे पायथन पॅकेज वितरित करणे हे तुमचे काम जगासोबत शेअर करण्याचा आणि पायथन इकोसिस्टममध्ये योगदान देण्याचा एक उत्तम मार्ग आहे. या मार्गदर्शकामध्ये नमूद केलेल्या पायऱ्या आणि सर्वोत्तम पद्धतींचे पालन करून, तुम्ही उच्च-गुणवत्तेचे पायथन पॅकेजेस तयार आणि प्रकाशित करू शकता जे इन्स्टॉल करणे, वापरणे आणि सांभाळणे सोपे आहे. तुमच्या पॅकेजच्या यशासाठी स्पष्ट दस्तऐवजीकरण, कसून चाचणी आणि सातत्यपूर्ण आवृत्ती व्यवस्थापनाला प्राधान्य द्या.