حصہ 1: Python اور PyPI کے لیے ایک سادہ CI/CD پائپ لائن قائم کرنا
شائع شدہ: 17 July 2025
تعارف
ڈویلپمنٹ کے پروسیسز کی خودکاری موجودہ پروژیکٹس میں لازمی بن گئی ہے۔ ایک خوبصورت ڈیزائن کیا گیا CI/CD pipeline نہ صرف ڈیولپمنٹ سیکل کے ابتداء میں ریگریشنز کا تعیناتی کرنے کی اجازت دیتا ہے، بلکہ ڈپلویمنٹ کے پروسیس کو مکمل طور پر خودکار بنانے میں بھی مدد کرتا ہے۔
اس مضامین میں، ہم ایک Python ایپلیکیشن کے لیے GitHub Actions کے ساتھ مکمل پائلائن کی ترتیبات کا جائزہ لین گے، مستقل انٹگریگیشن (CI) سے مستقل ڈپلوائیمنٹ (CD) تک PyPI پر۔
پائپ لائن کی معماری
ہمارا پائپ لائن دو مختلف ورک فلو پر مشتمل ہے:
-
سی آئی پائپ لائن: ہر push اور pull request پر چلایا جاتا ہے
-
سی دی پائلپائن: sarf GitHub keys releases keys doran triggered
@startuml
!theme plain
package "گیٹهاب ریپوزٹری" {
[Source Code] as source
[GitHub Actions] as actions
}
package "سی آئی پیپ لائن" {
[Checkout] as checkout_ci
[Setup Python] as python_ci
[Install Dependencies] as deps_ci
[Linting (Ruff)] as lint
[Unit Tests] as tests
}
package "CD پائپ لائن" {
[Checkout] as checkout_cd
[Setup Python] as python_cd
[Build Package] as build
[Publish to PyPI] as pypi
}
source --> actions : Push/PR
actions --> checkout_ci
checkout_ci --> python_ci
python_ci --> deps_ci
deps_ci --> lint
lint --> tests
source --> actions : Release
actions --> checkout_cd : On Release
checkout_cd --> python_cd
python_cd --> build
build --> pypi
@enduml
CI پائلائن کی کنفیگریشن
CI ورکفلو کی ساخت
CI workflow ہر کوڈ میں ہونے والی ہر योगदान کو تصدیق کرنے کے لیے ڈیزائن کیا گیا ہے۔ اس کی مکمل تنظیم یہاں دی گئی ہے:
name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install ruff pytest pytest-mock
- name: Run Linting (Ruff)
run: ruff check .
- name: Run Tests (Pytest)
run: pytest
CI کے مراحل کا تجزیہ
1. ٹرگرز (on)
----
----
----
----
on:
push:
branches:
- main
pull_request:
branches:
- main
----
پائلائن اس پر ٹریجر ہوتا ہے: ہر پش شاخہ پر`main` - ہر pull request کی طرف`main`
یہ رویہ یہ یقین دلاتی ہے کہ بنیادی کوڈ مستحکم رہے اور ہر مشارکت کو انٹیگریشن سے پہلے تصدیق کی جاتی ہے۔
==== 2. نفاذ کا ماحول
----
runs-on: ubuntu-latest
Ubuntu Latest Python کے اکثر پراجیکٹس کے لیے عمل کردگی، خرج اور ہم آہنگی کے درمیان ایک اچھا توازن فراہم کرتا ہے۔
==== 3. کوڈ کا چیک آؤٹ
----
- name: Checkout code uses: actions/checkout@v4
عمل`checkout@v4`یہ ریپازٹری کا سروس کوڈ obtains. ورژن v4 کی کارکردگی اور محفوظیت میں بہتری لاتی ہے۔
==== 4. پایتھن کی کنفیگریشن
- name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.x'
استعمال کا`'3.x'`یہ خودکار طور پر Python 3 کی آخری مستحکم ورژن استعمال کرنے کی اجازت دیتا ہے، جس سے رکھراحت آسان ہو جاتی ہے۔
==== 5. Dependencies کی انسٹالیشن
----
- name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install ruff pytest pytest-mock
یہ مرحلہ : - پیپ کو سب سے نئی ورژن میں اپ ڈیٹ کریں - پروجیکٹ کی انحصارات انسٹال کریں - آلات توسیع شامل کریں (linting اور ٹیسٹس)
==== 6. لنٹنگ ساث Ruff
- name: Run Linting (Ruff) run: ruff check .
**راف**بہت تیز Python لینٹر جو Rust میں لکھا گیا ہے۔ یہ Flake8، Black، isort کے فیچرز کو ایک ہی مؤثر ٹول میں جمع کرتا ہے۔
==== 7. ٹسٹوں کا تنفیذ
- name: Run Tests (Pytest) run: pytest
Pytest مکمل ٹیسٹ سٹائل چلتا ہے جس سے یقین دلایا جاتا ہے کہ تبدیلیاں رجresseions کا سبب نہیں بنتی۔
== داپلويمانٹ کی پائپ لائن کی تنظیم (CD)
=== سی ڈی ورک فلو کی ساخت
سی ڈی ورک فلو صرف گِٹ ہب ریلیزز پر trigger ہوتا ہے اور PyPI پر پابلیش کرنے کی عملية خودکار بناتی ہے :
[source,yaml]
----
name: Publish to PyPI
on:
release:
types:
- published
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
- name: Build and publish
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
python setup.py sdist bdist_wheel
twine upload dist/*
----
=== سی ڈی کے مراحل کا تجزیہ
==== 1. ٹریگر Release
on: release: types: - published
سی ڈی pipeline صرف گٹ هب ریلز کی פרס کے دوران چلتا ہے۔ یہApproach ڈپلویمنٹس کا دقیق کنٹرول یقینی بناتی ہے۔
==== 2. بِلڈ ٹولز کی تنصیب
```yaml
----
----
----
----
pip install setuptools wheel twine
----
- **setuptools**: پایتھن کے پیکنگ آلات - **پہیہ**: موجودہ Python کی تقسیم کا فاریٹ - **رسی**: PyPI پر آپلوڈ کرنے کا محفوظ اُزَر
==== 3. احراز شناخت کی کنفیگریشن
----
env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
اصالت پذیری ایک PyPI API ٹوکن استعمال کرتی ہے جو گیت ہب کے راز کے طور پر محفوظ ہے، اور یہ روایتی credentials سے زیادہ محفوظ ہے۔
==== 4. بناؤ اور شائع کرنا
----
run: | python setup.py sdist bdist_wheel twine upload dist/*
- `sdist`: ایک منبعی توزیع بنائیں - `bdist_wheel`: ایک ویلیل بنائیں (بائنری ڈسپرشن) - `twine upload`: PyPI پر ڈسٹریبیوشنز شائع کریں
== پائیتھن پیکیج کی تنظیمات
=== setup.py کی ساخت
پائپ لائن کام کرنے کے لیے, آپ کے پروجيكت کو ایک فائل شامل کرنا ضروری ہے`setup.py`:
[source,python]
----
from setuptools import setup, find_packages
with open("README.adoc", "r", encoding="utf-8") as fh:
long_description = fh.read()
setup(
name="playlist-downloader",
version="1.0.0",
author="Votre Nom",
author_email="[email protected]",
description="CLI tool for managing YouTube playlists",
long_description=long_description,
long_description_content_type="text/plain",
url="https://github.com/cheroliv/playlist-downloader",
packages=find_packages(),
classifiers=[
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
],
python_requires=">=3.8",
install_requires=[
"typer>=0.9.0",
"yt-dlp>=2023.1.6",
"google-api-python-client>=2.70.0",
"google-auth-oauthlib>=0.7.1",
"pymonad>=2.4.0",
"pyyaml>=6.0",
],
entry_points={
"console_scripts": [
"playlist-downloader=cli:app",
],
},
)
----
=== setup.py کے کلیدی نکات
1. **میٹا ڈیٹا**نام، نسخہ، مؤلف، تفصیل
2. **معتمدیات**:ضروري پيچجوں کی فہرست
3. **دخول کے نقاط**: كلائی کے منافذ شدہ فرمان
4. **طبقہ بندی کرنے والے**: میٹا ڈیٹا کے لیے PyPI
== گیت ہب سیکریٹس کے ساتھ سیکیورٹی
=== PyPI ٹوکن کی کنفیگریشن
1. **PyPI پر API ٹوکن بنائیں**:
- PyPI پر لاگ ان کریں - Account Settings > API tokens پر جائیں - ایک نئی ٹوکن بنائیں مُناسب اجازات کے ساتھ
1. **GitHub میں سیکریٹ شامل کریں** :
- ریپوزیٹری سٹنگز > رازوں اور متغیرات > ایکشنز - ایک نیا راز بنام بناؤ`PYPI_API_TOKEN` - اپنا PyPI ٹوکن پیسٹ کریں
[plantuml, secrets-flow, svg]
----
@startuml
!theme plain
actor Developer as dev
participant "گٹھب ریپازٹری" as repo
participant "گٹ ہب ایکشنز" as actions
participant PyPI
dev -> repo : Configure PYPI_API_TOKEN secret
repo -> actions : Trigger CD pipeline on release
actions -> actions : Access secret securely
actions -> PyPI : Authenticate with token
PyPI -> PyPI : Validate and publish package
note over actions, PyPI
Token never exposed in logs
Automatic rotation possible
end note
@enduml
----
== مکمل ڈپلویمنٹ وورکفلو
=== ڈپلویمنٹ کی ترتیب
[plantuml, deployment-sequence, svg]
----
@startuml
!theme plain
actor Developer as dev
participant "مقامی Git" as git
participant "GitHub" as github
participant "گیٹهاب ایکشنز" as actions
participant PyPI
participant "انتهاء استعمال کرنے والے" as users
dev -> git : git tag v1.0.0
dev -> git : git push origin v1.0.0
git -> github : Push tag
dev -> github : Create release from tag
github -> actions : Trigger CD pipeline
actions -> actions : Checkout code
actions -> actions : Setup Python environment
actions -> actions : Install build tools
actions -> actions : Build distributions (sdist + wheel)
actions -> PyPI : Upload to PyPI with token
PyPI -> PyPI : Validate and publish
users -> PyPI : pip install playlist-downloader
note over dev, github
Release creation can be automated
or done manually through GitHub UI
end note
@enduml
----
=== پائلائن کی حالات
[plantuml, pipeline-states, svg]
----
@startuml
!theme plain
[*] --> Idle
Idle --> CI_Running : Push/PR created
CI_Running --> CI_Success : All checks pass
CI_Running --> CI_Failed : Linting/Tests fail
CI_Success --> Idle : Merge completed
CI_Failed --> Idle : Fix and retry
Idle --> CD_Running : Release published
CD_Running --> CD_Success : Package published
CD_Running --> CD_Failed : Build/Upload error
CD_Success --> Idle : Package available on PyPI
CD_Failed --> Idle : Fix and retry release
note on link #red : Blocks merge
note on link #green : Allows deployment
@enduml
----
== بہترین طریقے اور بهتریارات
=== 1. ورژنوں کی نگرانی
سیمانٹک گٹ ٹیگز استعمال کریں :
git tag -a v1.2.3 -m "Release version 1.2.3" git push origin v1.2.3
=== 2. میٹرکس ٹیسٹس
پایتھن کے مختلف ورژنوں پر ٹیسٹ کرنے کے لیے :
----
strategy: matrix: python-version: [3.8, 3.9, "3.10", "3.11"]
=== 3. اسقاطات کی کش
کیش کے ساتھ بِلڈز کو تیز کریں:
- name: Cache pip dependencies uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
=== 4. ڈپلوائی کے ماحول
کنٹرولڈ ڈپلوئمنٹس کے لیے گتهاب ماحولات استعمال کریں :
jobs: deploy: environment: production runs-on: ubuntu-latest
1. **GitHub میں سیکرٹ شامل کریں**براہ کرم اپنی `API key` فراہم کریں۔
=== استعمال کے کیس ڈائاگرام
[plantuml, use-cases, svg]
----
@startuml
!theme plain
left to right direction
actor "ڈویلپر" as dev
actor "گیٹ هب ایکشنس" as ga
actor "اندراج صارف" as user
package "CI/CD نظام" {
usecase "لنٹنگ چلائیں" as lint
usecase "ٹیسٹس چلائیں" as test
usecase "بیلڈ پیکیج" as build
usecase "PyPI پر اشاعت کریں" as publish
usecase "Release بنائیں" as release
}
dev --> lint : Pushes code
dev --> test : Pushes code
dev --> release : Creates release
ga --> build : On release trigger
ga --> publish : After successful build
user --> publish : Downloads package
lint .> test : triggers
test .> build : on success
build .> publish : on success
@enduml
----
=== ڈپلویمنٹ کی معماری
[plantuml, deployment-architecture, svg]
----
@startuml
!theme plain
cloud "گیٹ ہاب" {
[Source Repository]
[GitHub Actions]
[Secrets Store]
}
cloud "PyPI" {
[Package Registry]
[Distribution Files]
}
node "CI/CD پائپ لائن" {
[Linting]
[Testing]
[Building]
[Publishing]
}
[Source Repository] --> [GitHub Actions] : Triggers
[GitHub Actions] --> [Linting]
[Linting] --> [Testing]
[Testing] --> [Building]
[Building] --> [Publishing]
[Publishing] --> [Package Registry] : Uploads
[Secrets Store] --> [Publishing] : Provides token
note as N1
Secure token-based
authentication
end note
[Secrets Store] .. N1
@enduml
----
== نظارت اور ڈیبگنگ
=== لوگز اور مانیٹرنگ
GitHub Actions ہر مرحلے کے لیے تفصیل سے لاگز فراہم کرتا ہے۔ ڈبگ کرنے کے لیے :
1. **جانچیں لوگز**ہر سٹپ کا
2. **ڈیباگ کو فعال کریں**کے ساتھ`ACTIONS_STEP_DEBUG`
3. **آرٹیکٹس استعمال کریں**بیلڈ فائلز محفوظ کرنے
- name: Upload build artifacts uses: actions/upload-artifact@v3 if: failure() with: name: build-logs path: build/
=== نوٹیفیکیشنز
سلیک یا ای میل نوٹیفیکیشن شامل کریں :
```yaml
----
----
----
----
- name: Notify on failure
if: failure()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
----
== نتیجہ
گٹ ہب ایکشنز کے ساتھ مضبوط CI/CD پائلائن کی وضاحت کرنے سے ڈویلپمنٹ کا تجربہ بالکل بدل جاتا ہے۔ لنٹنگ، ٹیسٹس اور ڈپلائمنٹ کو خودکار بناتے ہوئے، آپ :
- **غلطیاں کم کریں**پروڈکشن میں - **چکروں کی رفتار بڑھاؤ**ترقی کا - **اعتماد کو بہتر بنائیں**آپ کے ریلیز میں - **تعاون کو آسان بنائیں**ٹیمی طور پر
یہ لائن پراپلائن مختلف قسم کے Python پروجیکٹ کے لیے لنٹنگ ٹولز، ٹیسٹ فریم ورک یا ڈپلویمنٹ کے مقصد میں ایڈجسٹ کر کے مناسب بنایا جا سکتا ہے۔
یہ ورکفلوز کی ترتیبیات میں ہونے والا ابتدائی سرمایہ کاری، ڈپلویمنٹ کے دوران وقت کی بچت اور دستی غلطیاں میں کمی کے باعث جلداً واپس ہو جاتا ہے۔
== اضافی وسائل
- https://docs.github.com/en/actions[گیٹهاب ایکشنز کی دستاویزات] - https://packaging.python.org/[پائیٹن پیکینگ گائیڈ] - https://docs.pytest.org/[ڈاکیومینٹیشن Pytest] - https://docs.astral.sh/ruff/[دستاویزات Ruff] - https://twine.readthedocs.io/[دستاویزات Twine]
✅ کارآمد پائلائن پہنچ گیا ! آپ کے پاس اب ایک سادہ CI/CD پائلائن ہے جس سے آپ اپنی ٹیسٹس خودکار کر سکتے ہیں اور اپنا Python پکیج PyPI پر GitHub Actions سے مباشرہPublish کر سکتے ہیں۔
مگر، یہ پائلائن خود بخواہ minimalist رہتا ہے۔ یہ ابھی تک بعض ضروری پہلوؤں کو پروفیشنل ماحول میں پوری طرح ڈھک نہیں پاتا :
پائیتون کے متعدد ورژنوں کے ٹیسٹ،
خودکار سیکورٹی تجزیہ,
Test PyPI کے ذریعے ترقیاتی ڈپلویمنٹ,
پائپ لائن کی نگرانی اور میٹرکس,
نسخہ بندی کی خودکاری اور مودرن بہترین طریقے کیinteгриشن (pyproject.toml).
اگلے حصے میں ہم ایک اعلیٰ سطح پر منتقل ہوں گے۔ آپ سیکھیں گے کہ اس بنیادی pipeline کو یکسانی صنعت کے ڈپلومینٹ کی زنجیر (industrial deployment chain) میں تبدیل کریں گے jo مضبوط، محفوظ اور إنتاجی Python پروژیز کے لیے تیار ہو۔
----
----
متعدد پائیتھن ورژنز پر ٹیسٹ کرنے کے لیے:
----
strategy: matrix: python-version: [3.8, 3.9, "3.10", "3.11"]
=== 3. ڈیپینڈینسیز کیش (Cache des Dépendances)
کیش (cache) کے ساتھ بلڈز کو تیز کریں:
```yaml
----
----
- name: Cache pip dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
----
=== 4. تعیناتی کے ماحول (Deployment Environments)
کنٹرول شدہ تعیناتیوں (deployments) کے لیے GitHub انوائرنمنٹس کا استعمال کریں:
----
jobs: deploy: environment: production runs-on: ubuntu-latest
== استعمال کے کیسز اور آرکیٹیکچر
=== یوز کیس ڈایاگرام (Diagramme de Cas d'Usage)
[plantuml, use-cases, svg]
----
@startuml
!theme plain
left to right direction
actor "ڈویلپر" as dev
actor "GitHub Actions" as ga
actor "اینڈ یوزر" as user
package "CI/CD سسٹم" {
usecase "لنٹنگ چلائیں" as lint
usecase "ٹیسٹ Execute کریں" as test
usecase "پیکج Build کریں" as build
usecase "PyPI پر شائع کریں" as publish
usecase "ریلیز بنائیں" as release
}
dev --> lint : Pushes code
dev --> test : Pushes code
dev --> release : Creates release
ga --> build : On release trigger
ga --> publish : After successful build
user --> publish : Downloads package
lint .> test : triggers
test .> build : on success
build .> publish : on success
@enduml
----
=== ڈیپلائمنٹ کا آرکیٹیکچر
[plantuml, deployment-architecture, svg]
----
@startuml
!theme plain
cloud "GitHub" {
[Source Repository]
[GitHub Actions]
[Secrets Store]
}
cloud "PyPI" {
[Package Registry]
[Distribution Files]
}
node "CI/CD پائپ لائن" {
[Linting]
[Testing]
[Building]
[Publishing]
}
[Source Repository] --> [GitHub Actions] : Triggers
[GitHub Actions] --> [Linting]
[Linting] --> [Testing]
[Testing] --> [Building]
[Building] --> [Publishing]
[Publishing] --> [Package Registry] : Uploads
[Secrets Store] --> [Publishing] : Provides token
note as N1
سکیور ٹوکن tabadul-based
تصدیق
end note
[Secrets Store] .. N1
@enduml
----
== نگرانی اور ڈیبگنگ
=== لاگز اور مانیٹرنگ
GitHub Actions ہر مرحلے کے لیے تفصیلی لاگز فراہم کرتا ہے۔ ڈیبگ کرنے کے لیے:
1. **لاگز (logs) کا معائنہ کریں**ہر `step` کے
2. **ڈیبگ کو فعال کریں**کے ساتھ`ACTIONS_STEP_DEBUG`
3. **آرٹِفیکٹس استعمال کریں**بلڈ فائلوں کو محفوظ کرنے کے لیے
```yaml
----
----
- name: Upload build artifacts
uses: actions/upload-artifact@v3
if: failure()
with:
name: build-logs
path: build/
----
=== نوٹیفیکیشنز
سلیک (Slack) یا ای میل نوٹیفیکیشنز شامل کریں:
----
- name: Notify on failure if: failure() uses: 8398a7/action-slack@v3 with: status: ${{ job.status }} webhook_url: ${{ secrets.SLACK_WEBHOOK }}
== نتیجہ
GitHub Actions کے ساتھ ایک مضبوط CI/CD پائپ لائن کا قیام ڈویلپمنٹ کے تجربے کو مکمل طور پر بدل دیتا ہے۔ لنٹنگ، ٹیسٹنگ اور ڈیپلائمنٹ کو خودکار بنا کر، آپ:
- **غلطیوں کو کم کریں**پروڈکشن میں - **سائیکلز کو تیز کریں**ترقی کے - **اعتماد میں اضافہ کریں**آپ کے ریلیزز میں - **تعاون کو آسان بنائیں**ٹیم میں
اس پائپ لائن کو لنٹنگ ٹولز، ٹیسٹنگ فریم ورکس، یا ڈیپلائمنٹ کی منزلوں کو ایڈجسٹ کر کے مختلف قسم کے پائتھون (Python) پروجیکٹس کے مطابق ڈھالا جا سکتا ہے۔
ان ورک فلو (workflows) کی ترتیب میں ابتدائی سرمایہ کاری، تعیناتیوں (deployments) کے دوران وقت کی بچت اور دستی غلطیوں میں کمی کے ذریعے جلد ہی پورا ہو جاتا ہے۔
== اضافی وسائل
- https://docs.github.com/en/actions[GitHub Actions کی دستاویزات] - https://packaging.python.org/[پائتھن پیکیجنگ گائیڈ] - https://docs.pytest.org/[Pytest دستاویزات] - https://docs.astral.sh/ruff/[Ruff کی دستاویزات] - https://twine.readthedocs.io/[ٹوائن (Twine) کی دستاویزات]
✅ فعال پائپ لائن حاصل ہو گئی! اب آپ کے پاس ایک سادہ CI/CD پائپ لائن ہے جو آپ کو اپنے ٹیسٹ خودکار بنانے اور براہ راست GitHub Actions سے اپنا Python پیکیج PyPI پر شائع کرنے کی اجازت دیتی ہے۔
تاہم، یہ پائپ لائن جان بوجھ کر سادہ رکھی گئی ہے۔ یہ ابھی تک پیشہ ورانہ سیاق و سباق میں بعض ناگزیر پہلوؤں کا احاطہ نہیں کرتی:
پائتھن کے کثیر ورژنز کے ٹیسٹ،
خودکار سیکیورٹی تجزیہ،
Test PyPI کے ذریعے بتدریج تعیناتی،
پائپ لائن کی نگرانی اور میٹرکس،
ورژننگ کی خودکاری اور جدید بہترین طریقوں (pyproject.toml) کی انٹیگریشن۔
اگلے حصے میں، ہم اگلے مرحلے پر جائیں گے۔ آپ سیکھیں گے کہ اس بنیادی پائپ لائن کو کس طرح ایک حقیقی صنعتی، مضبوط اور محفوظ ڈیپلائمنٹ چین میں تبدیل کیا جائے، جو پروڈکشن کے پائتھون (Python) پروجیکٹس کے لیے تیار ہو۔