पायथन पॅकेज व्यवस्थापनासाठी सेटअप.पाय आणि पायप्रोजेक्ट.टॉमलची सखोल तुलना, सर्वोत्तम पद्धती, स्थलांतरण धोरणे आणि आधुनिक साधनांचा समावेश.
पायथन पॅकेज स्ट्रक्चर: सेटअप.पाय वि. पायप्रोजेक्ट.टॉमल - एक सर्वसमावेशक मार्गदर्शक
वर्षानुवर्षे, setup.py
फाईल पायथन पॅकेज व्यवस्थापनाचा आधारस्तंभ होती. तथापि, परिस्थिती बदलली आहे आणि pyproject.toml
एक आधुनिक पर्याय म्हणून उदयास आले आहे. हा सर्वसमावेशक मार्गदर्शक या दोन दृष्टिकोनमधील फरक स्पष्ट करतो, ज्यामुळे तुम्हाला तुमच्या प्रोजेक्टसाठी कोणता योग्य आहे हे समजण्यास आणि तुमचे पायथन पॅकेज प्रभावीपणे व्यवस्थापित करण्यास मदत होते.
मूलभूत गोष्टी समजून घेणे
पायथन पॅकेज म्हणजे काय?
पायथन पॅकेज म्हणजे तुमचा पायथन कोड आयोजित करण्याचा आणि वितरित करण्याचा एक मार्ग. हे तुम्हाला संबंधित मॉड्यूल्सना डिरेक्टरी रचनेत गटबद्ध करण्याची परवानगी देते, ज्यामुळे तुमचा कोड अधिक मॉड्युलर, पुन्हा वापरण्यायोग्य आणि देखरेख करण्यायोग्य बनतो. इतरांसोबत तुमचा कोड शेअर करण्यासाठी आणि तुमच्या प्रोजेक्ट्समधील अवलंबित्व व्यवस्थापित करण्यासाठी पॅकेजेस आवश्यक आहेत.
पॅकेज मेटाडेटाची भूमिका
पॅकेज मेटाडेटा तुमच्या पॅकेजविषयी आवश्यक माहिती प्रदान करतो, जसे की त्याचे नाव, आवृत्ती, लेखक, अवलंबित्व आणि एंट्री पॉइंट्स. pip
सारखे पॅकेज व्यवस्थापक तुमचे पॅकेज स्थापित करण्यासाठी, अपग्रेड करण्यासाठी आणि व्यवस्थापित करण्यासाठी या मेटाडेटाचा वापर करतात. ऐतिहासिकदृष्ट्या, setup.py
हा मेटाडेटा परिभाषित करण्याचा प्राथमिक मार्ग होता.
सेटअप.पाय: पारंपरिक दृष्टिकोन
सेटअप.पाय म्हणजे काय?
setup.py
ही एक पायथन स्क्रिप्ट आहे जी तुमच्या पॅकेजची रचना आणि मेटाडेटा परिभाषित करण्यासाठी setuptools
लायब्ररी वापरते. ही एक डायनॅमिकली एक्झिक्युटेड फाईल आहे, याचा अर्थ ती पॅकेज कॉन्फिगर करण्यासाठी पायथन कोड चालवते.
सेटअप.पायचे मुख्य घटक
एका विशिष्ट setup.py
फाईलमध्ये खालील घटक समाविष्ट असतात:
- पॅकेजचे नाव: तुमच्या पॅकेजचे नाव (उदा.
my_package
). - आवृत्ती: तुमच्या पॅकेजची आवृत्ती क्रमांक (उदा.
1.0.0
). - लेखक आणि व्यवस्थापक माहिती: पॅकेजचे लेखक आणि व्यवस्थापक यांच्या तपशील.
- अवलंबित्व: तुमच्या पॅकेजवर अवलंबून असलेल्या इतर पॅकेजची यादी (उदा.
requests >= 2.20.0
). - एंट्री पॉइंट्स: तुमच्या पॅकेजमध्ये कमांड-लाइन स्क्रिप्ट किंवा इतर एंट्री पॉइंट्सची व्याख्या.
- पॅकेज डेटा: नॉन-कोड फाईल्स (उदा. कॉन्फिगरेशन फाईल्स, डेटा फाईल्स) ज्या पॅकेजमध्ये समाविष्ट केल्या पाहिजेत.
उदाहरण सेटअप.पाय
```python from setuptools import setup, find_packages setup( name='my_package', version='1.0.0', author='John Doe', author_email='john.doe@example.com', description='A simple Python package', packages=find_packages(), install_requires=[ 'requests >= 2.20.0', ], entry_points={ 'console_scripts': [ 'my_script = my_package.module:main', ], }, classifiers=[ 'Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', ], ) ```सेटअप.पायचे फायदे
- परिचितता: हा पारंपरिक आणि सुप्रसिद्ध दृष्टिकोन आहे, त्यामुळे अनेक डेव्हलपर याला आधीपासूनच परिचित आहेत.
- लवचिकता: कारण ही एक पायथन स्क्रिप्ट आहे, ती उच्च प्रमाणात लवचिकता प्रदान करते. तुम्ही आवश्यकतेनुसार जटिल लॉजिक कार्य करू शकता आणि बिल्ड प्रक्रिया सानुकूलित करू शकता.
- विस्तारणीयता: सेटअपटूल्स वैशिष्ट्यांचा एक समृद्ध संच प्रदान करते आणि सानुकूल कमांड्स आणि एक्सटेंशन्ससह विस्तारित केले जाऊ शकते.
सेटअप.पायचे तोटे
- डायनॅमिक एक्झिक्यूशन:
setup.py
चे डायनॅमिक स्वरूप हे सुरक्षा धोका असू शकते, कारण ते बिल्ड प्रक्रियेदरम्यान यादृच्छिक कोड चालवते. - अव्यक्त अवलंबित्व:
setup.py
अनेकदा सेटअपटूल्स स्वतः सारख्या अव्यक्त अवलंबित्वांवर अवलंबून असते, ज्यामुळे विसंगती आणि त्रुटी येऊ शकतात. - जटिलता: जटिल प्रोजेक्ट्ससाठी,
setup.py
मोठे आणि देखरेख करणे कठीण होऊ शकते. - मर्यादित घोषणात्मक कॉन्फिगरेशन: पॅकेज मेटाडेटाचा बराचसा भाग घोषणात्मकऐवजी आदेशात्मकपणे परिभाषित केला जातो, ज्यामुळे तो समजणे कठीण होते.
पायप्रोजेक्ट.टॉमल: आधुनिक पर्याय
पायप्रोजेक्ट.टॉमल म्हणजे काय?
pyproject.toml
ही एक कॉन्फिगरेशन फाईल आहे जी तुमच्या पॅकेजची बिल्ड सिस्टीम आणि मेटाडेटा परिभाषित करण्यासाठी TOML (Tom's Obvious, Minimal Language) फॉरमॅट वापरते. हा एक घोषणात्मक दृष्टिकोन आहे, याचा अर्थ तुम्ही काय साध्य करू इच्छिता हे निर्दिष्ट करता, ते कसे साध्य करायचे हे नाही.
पायप्रोजेक्ट.टॉमलचे मुख्य विभाग
एका विशिष्टpyproject.toml
फाईलमध्ये खालील विभाग समाविष्ट असतात:
[build-system]
: वापरण्यासाठी बिल्ड सिस्टीम परिभाषित करते (उदा.setuptools
,poetry
,flit
).[project]
: प्रोजेक्टविषयी मेटाडेटा समाविष्ट करतो, जसे की त्याचे नाव, आवृत्ती, वर्णन, लेखक आणि अवलंबित्व.[tool.poetry]
किंवा[tool.flit]
: टूल-विशिष्ट कॉन्फिगरेशनसाठी विभाग (उदा. पोएट्री, फ्लिट).
उदाहरण पायप्रोजेक्ट.टॉमल (सेटअपटूल्स सह)
```toml [build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "my_package" version = "1.0.0" description = "A simple Python package" authors = [ { name = "John Doe", email = "john.doe@example.com" } ] dependencies = [ "requests >= 2.20.0", ] [project.scripts] my_script = "my_package.module:main" [project.optional-dependencies] dev = [ "pytest", "flake8", ] [project.classifiers] classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] [project.urls] homepage = "https://example.com" repository = "https://github.com/example/my_package" ```उदाहरण पायप्रोजेक्ट.टॉमल (पोएट्री सह)
```toml [tool.poetry] name = "my_package" version = "1.0.0" description = "A simple Python package" authors = ["John Doeपायप्रोजेक्ट.टॉमलचे फायदे
- घोषणात्मक कॉन्फिगरेशन:
pyproject.toml
तुमच्या पॅकेज मेटाडेटा परिभाषित करण्यासाठी एक घोषणात्मक मार्ग प्रदान करते, ज्यामुळे ते समजून घेणे आणि देखरेख करणे सोपे होते. - मानकीकृत बिल्ड सिस्टीम: हे वापरण्यासाठी बिल्ड सिस्टीम निर्दिष्ट करते, ज्यामुळे विविध वातावरणांमध्ये सुसंगत बिल्डची खात्री होते.
- सुधारित अवलंबित्व व्यवस्थापन: पोएट्री आणि पिपएन्व्ह सारखी साधने मजबूत अवलंबित्व व्यवस्थापन वैशिष्ट्ये प्रदान करण्यासाठी
pyproject.toml
सह अखंडपणे एकत्रित होतात. - सुरक्षितता धोके कमी: कारण ती एक स्थिर कॉन्फिगरेशन फाईल आहे, त्यामुळे बिल्ड प्रक्रियेदरम्यान कोड डायनॅमिकली एक्झिक्यूट करण्याशी संबंधित सुरक्षा धोके दूर होतात.
- आधुनिक साधनांसह एकत्रीकरण:
pyproject.toml
पोएट्री, पिपएन्व्ह आणि फ्लिट सारख्या आधुनिक पायथन पॅकेजिंग साधनांसाठी मानक आहे.
पायप्रोजेक्ट.टॉमलचे तोटे
- शिकण्याची वक्रता: डेव्हलपर्सना नवीन सिंटॅक्स (TOML) आणि पॅकेज व्यवस्थापनाबद्दल विचार करण्याची नवीन पद्धत शिकण्याची आवश्यकता असू शकते.
- मर्यादित लवचिकता: हे अत्यंत सानुकूलित बिल्ड प्रक्रियेसाठी योग्य नसू शकते ज्यासाठी जटिल लॉजिकची आवश्यकता असते.
- साधनांवर अवलंबित्व: तुम्हाला एक विशिष्ट बिल्ड सिस्टीम (उदा. सेटअपटूल्स, पोएट्री, फ्लिट) निवडण्याची आणि ती कशी वापरावी हे शिकण्याची आवश्यकता असेल.
सेटअप.पाय आणि पायप्रोजेक्ट.टॉमलची तुलना
setup.py
आणि pyproject.toml
मधील मुख्य फरक येथे टेबलमध्ये सारांशित केले आहेत:
वैशिष्ट्य | सेटअप.पाय | पायप्रोजेक्ट.टॉमल |
---|---|---|
कॉन्फिगरेशन शैली | आदेशात्मक (पायथन कोड) | घोषणात्मक (TOML) |
बिल्ड सिस्टीम | अव्यक्त (सेटअपटूल्स) | स्पष्ट ([build-system] मध्ये निर्दिष्ट) |
सुरक्षा | संभाव्यतः कमी सुरक्षित (डायनॅमिक एक्झिक्यूशन) | अधिक सुरक्षित (स्थिर कॉन्फिगरेशन) |
अवलंबित्व व्यवस्थापन | मूलभूत (install_requires ) |
प्रगत (पोएट्री, पिपएन्व्ह सह एकत्रीकरण) |
साधने | पारंपरिक (सेटअपटूल्स) | आधुनिक (पोएट्री, पिपएन्व्ह, फ्लिट) |
लवचिकता | उच्च | मध्यम |
जटिलता | जटिल प्रोजेक्ट्ससाठी उच्च असू शकते | सामान्यतः कमी |
स्थलांतरण धोरणे: सेटअप.पाय ते पायप्रोजेक्ट.टॉमल
setup.py
वरून pyproject.toml
वर स्थलांतरण करणे कठीण वाटू शकते, परंतु दीर्घकालीन देखरेख आणि सुसंगततेसाठी हे एक फायदेशीर गुंतवणूक आहे. तुम्ही वापरू शकता अशी काही धोरणे येथे आहेत:
1. किमान पायप्रोजेक्ट.टॉमलने सुरुवात करा
एक मूलभूत pyproject.toml
फाईल तयार करा जी बिल्ड सिस्टीम निर्दिष्ट करते आणि नंतर हळू हळू setup.py
मधील मेटाडेटा pyproject.toml
मध्ये स्थलांतरित करा.
2. पायप्रोजेक्ट.टॉमलसह सेटअपटूल्स वापरा
सेटअपटूल्सला तुमच्या बिल्ड सिस्टीम म्हणून वापरणे सुरू ठेवा, परंतु प्रोजेक्ट मेटाडेटा pyproject.toml
मध्ये परिभाषित करा. हे तुम्हाला pyproject.toml
चे फायदे मिळवण्याची परवानगी देते, तरीही परिचित साधन वापरत असताना.
3. पोएट्रीसारखे आधुनिक साधन वापरा
पोएट्री किंवा पिपएन्व्हसारख्या आधुनिक साधनांवर स्थलांतर करण्याचा विचार करा. ही साधने व्यापक अवलंबित्व व्यवस्थापन वैशिष्ट्ये प्रदान करतात आणि pyproject.toml
सह अखंडपणे एकत्रित होतात.
उदाहरण: पोएट्रीमध्ये स्थलांतरण
- पोएट्री स्थापित करा:
pip install poetry
- तुमच्या प्रोजेक्टमध्ये पोएट्री सुरू करा:
poetry init
(हे तुम्हालाpyproject.toml
फाईल तयार करण्यास मार्गदर्शन करेल) - तुमचे अवलंबित्व जोडा:
poetry add requests
(किंवा इतर कोणतेही अवलंबित्व) - तुमचे पॅकेज तयार करा:
poetry build
4. स्वयंचलित स्थलांतरणासाठी साधनांचा वापर करा
काही साधने स्थलांतरण प्रक्रिया स्वयंचलित करण्यात मदत करू शकतात. उदाहरणार्थ, तुम्ही तुमची setup.py
फाईल pyproject.toml
फाईलमध्ये रूपांतरित करण्यासाठी साधने वापरू शकता.
पायथन पॅकेज व्यवस्थापनासाठी सर्वोत्तम पद्धती
1. व्हर्च्युअल एन्व्हायरमेंट वापरा
तुमच्या प्रोजेक्टचे अवलंबित्व सिस्टीम-व्यापी पायथन इंस्टॉलेशनपासून वेगळे करण्यासाठी नेहमी व्हर्च्युअल एन्व्हायरमेंट वापरा. हे संघर्ष टाळते आणि तुमच्या प्रोजेक्टमध्ये योग्य अवलंबित्व असल्याची खात्री करते.
venv
वापरून उदाहरण:
conda
वापरून उदाहरण:
2. अवलंबित्व अचूकपणे निर्दिष्ट करा
तुमच्या अवलंबित्वांच्या सुसंगत आवृत्त्या निर्दिष्ट करण्यासाठी आवृत्ती निर्बंध वापरा. हे विसंगत लायब्ररी अद्यतनांमुळे अनपेक्षित वर्तन टाळते. तुमचे अवलंबित्व व्यवस्थापित करण्यासाठी pip-tools
सारखी साधने वापरा.
उदाहरण अवलंबित्व विशिष्टता:
``` requests >= 2.20.0, < 3.0.0 ```3. सुसंगत बिल्ड सिस्टीम वापरा
एक बिल्ड सिस्टीम (उदा. सेटअपटूल्स, पोएट्री, फ्लिट) निवडा आणि त्यावर टिकून रहा. हे विविध वातावरणांमध्ये सुसंगत बिल्डची खात्री करते आणि पॅकेजिंग प्रक्रिया सोपी करते.
4. तुमच्या पॅकेजचे दस्तऐवजीकरण करा
तुमच्या पॅकेजसाठी स्पष्ट आणि संक्षिप्त दस्तऐवजीकरण लिहा. हे वापरकर्त्यांना तुमचे पॅकेज कसे वापरावे हे समजण्यास मदत करते आणि इतरांना तुमच्या प्रोजेक्टमध्ये योगदान देणे सोपे करते. तुमच्या कोडमधून दस्तऐवजीकरण तयार करण्यासाठी स्पिंक्स सारखी साधने वापरा.
5. कंटीन्युअस इंटिग्रेशन (CI) वापरा
जेव्हा तुमच्या कोडमध्ये बदल केले जातात तेव्हा तुमचे पॅकेज स्वयंचलितपणे तयार करण्यासाठी, चाचणी करण्यासाठी आणि तैनात करण्यासाठी CI सिस्टीम (उदा. GitHub Actions, Travis CI, GitLab CI) सेट करा. हे सुनिश्चित करते की तुमचे पॅकेज नेहमी कार्यरत स्थितीत आहे.
उदाहरण GitHub Actions कॉन्फिगरेशन:
```yaml name: Python Package on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.9 uses: actions/setup-python@v4 with: python-version: 3.9 - name: Install dependencies run: | python -m pip install --upgrade pip pip install poetry poetry install - name: Lint with flake8 run: | poetry run flake8 . - name: Test with pytest run: | poetry run pytest ```6. तुमचे पॅकेज PyPI वर प्रकाशित करा
तुमचे पॅकेज पायथन पॅकेज इंडेक्स (PyPI) वर प्रकाशित करून जगासोबत शेअर करा. हे इतरांना तुमचे पॅकेज स्थापित करणे आणि वापरणे सोपे करते.
PyPI वर प्रकाशित करण्यासाठी पायऱ्या:
- PyPI आणि TestPyPI वर खाते नोंदवा.
twine
स्थापित करा:pip install twine
.- तुमचे पॅकेज तयार करा:
poetry build
किंवाpython setup.py sdist bdist_wheel
. - तुमचे पॅकेज TestPyPI वर अपलोड करा:
twine upload --repository testpypi dist/*
. - तुमचे पॅकेज PyPI वर अपलोड करा:
twine upload dist/*
.
वास्तविक जगातील उदाहरणे
चला पाहूया की काही लोकप्रिय पायथन प्रोजेक्ट्स pyproject.toml
कसे वापरत आहेत:
- पोएट्री: स्वतःच्या पॅकेज व्यवस्थापनासाठी
pyproject.toml
वापरते. - ब्लॅक: अपरिवर्तनीय कोड फॉरमॅटर देखील
pyproject.toml
चा वापर करते. - फास्टएपीआय: पायथनसह API तयार करण्यासाठी एक आधुनिक, वेगवान (उच्च-कार्यक्षम) वेब फ्रेमवर्क देखील याचा वापर करते.
निष्कर्ष
pyproject.toml
पायथन पॅकेज व्यवस्थापनासाठी आधुनिक मानक दर्शवते, जे तुमच्या पॅकेज मेटाडेटा परिभाषित करण्यासाठी आणि अवलंबित्व व्यवस्थापित करण्यासाठी एक घोषणात्मक आणि सुरक्षित मार्ग प्रदान करते. जरी setup.py
ने आपल्याला चांगले काम केले असले तरी, दीर्घकालीन देखरेख, सुसंगतता आणि आधुनिक साधनांसह एकत्रीकरणासाठी pyproject.toml
वर स्थलांतरण करणे एक फायदेशीर गुंतवणूक आहे. सर्वोत्तम पद्धतींचा अवलंब करून आणि योग्य साधनांचा वापर करून, तुम्ही तुमची पायथन पॅकेजिंग कार्यप्रवाह सुलभ करू शकता आणि उच्च-गुणवत्तेचे, पुन्हा वापरण्यायोग्य पॅकेज तयार करू शकता.