PEP 8 Style Guide და PyPI - Python სტანდარტები¶
შესავალი¶
კარგი კოდი არ არის მხოლოდ მუშა კოდი - ის უნდა იყოს გასაგები, თანმიმდევრული და მოვლადი. Python-ს აქვს ოფიციალური სტილის სახელმძღვანელო და პაკეტების მძლავრი ეკოსისტემა.
1. PEP 8 - Python Style Guide¶
რა არის PEP?¶
PEP (Python Enhancement Proposal) - Python-ის გაუმჯობესების წინადადება. PEP 8 არის ოფიციალური სახელმძღვანელო Python კოდის დასაწერად.
რატომ არის PEP 8 მნიშვნელოვანი?¶
- 📖 გასაგებობა - სხვებს ადვილად გაერკვევიან თქვენს კოდში
- 🤝 თანამშრომლობა - გუნდური მუშაობა უფრო ეფექტური ხდება
- 🔧 მოვლადობა - კოდის შეცვლა და განახლება იოლდება
- 💼 პროფესიონალიზმი - ყველა პროფესიონალი იყენებს სტანდარტებს
2. PEP 8 ძირითადი წესები¶
2.1 დაშორება (Indentation)¶
წესი: გამოიყენეთ 4 ცალი space (არა tab!)
# ✅ სწორი
def calculate_average(numbers):
total = sum(numbers)
count = len(numbers)
return total / count
# ❌ არასწორი (2 space)
def calculate_average(numbers):
total = sum(numbers)
return total / len(numbers)
2.2 ხაზის მაქსიმალური სიგრძე¶
წესი: მაქსიმუმ 79 სიმბოლო ხაზში
# ✅ სწორი - გრძელი ხაზის გატეხვა
def process_user_data(user_id, username, email,
phone_number, address):
pass
# ან ასე
result = some_function(
first_argument,
second_argument,
third_argument
)
# ❌ არასწორი - ძალიან გრძელი ხაზი
def process_user_data(user_id, username, email, phone_number, address, city, country, postal_code):
pass
2.3 სახელების მიცემა (Naming Conventions)¶
# ✅ ცვლადები და ფუნქციები: lowercase_with_underscores
user_name = "Giorgi"
total_price = 100
def calculate_total_price():
pass
# ✅ კლასები: CapitalizedWords (PascalCase)
class UserAccount:
pass
class ShoppingCart:
pass
# ✅ კონსტანტები: UPPERCASE_WITH_UNDERSCORES
MAX_CONNECTIONS = 100
PI = 3.14159
DATABASE_URL = "localhost:5432"
# ❌ არასწორი
UserName = "Giorgi" # ცვლადი არ უნდა იყოს PascalCase
def CalculatePrice(): # ფუნქცია არ უნდა იყოს PascalCase
pass
2.4 ცარიელი ხაზები¶
# ✅ სწორი - 2 ცარიელი ხაზი კლასებსა და ფუნქციებს შორის
class Student:
pass
class Teacher:
pass
def calculate_grade():
pass
def print_report():
pass
# ✅ 1 ცარიელი ხაზი მეთოდებს შორის კლასში
class Person:
def __init__(self, name):
self.name = name
def greet(self):
return f"Hello, {self.name}"
def goodbye(self):
return f"Goodbye, {self.name}"
2.5 Imports - ბიბლიოთეკების იმპორტი¶
# ✅ სწორი - თითოეული import ცალკე ხაზზე
import os
import sys
import json
# ✅ ჯგუფური imports
from collections import defaultdict, Counter
from typing import List, Dict, Optional
# ✅ იმპორტების რიგითობა:
# 1. სტანდარტული ბიბლიოთეკა
import os
import sys
# 2. მესამე მხარის პაკეტები
import numpy as np
import pandas as pd
# 3. ლოკალური imports
from myapp.models import User
from myapp.utils import helper
# ❌ არასწორი
import os, sys, json # ერთ ხაზზე არ უნდა
2.6 Whitespace - სივრცეები¶
# ✅ სწორი
x = 5
y = x + 10
my_list = [1, 2, 3]
result = function(arg1, arg2)
# ❌ არასწორი - ზედმეტი სივრცეები
x=5
y = x+10
my_list = [ 1,2,3 ]
result = function (arg1,arg2)
# ✅ ოპერატორების გარშემო
income = salary + bonus - tax
is_valid = (age >= 18) and (has_id == True)
# ✅ არგუმენტები
def function(arg1, arg2, arg3):
pass
2.7 კომენტარები¶
# ✅ სწორი - გასაგები კომენტარი
# Calculate the average score of all students
def calculate_average(scores):
return sum(scores) / len(scores)
# ✅ Docstring - ფუნქციის დოკუმენტაცია
def calculate_discount(price, discount_percent):
"""
Calculate final price after applying discount.
Args:
price (float): Original price
discount_percent (float): Discount percentage (0-100)
Returns:
float: Final price after discount
"""
discount = price * (discount_percent / 100)
return price - discount
# ❌ არასწორი - ზედმეტი კომენტარი
x = x + 1 # Increment x by 1
3. Style Guide Checkers¶
3.1 პოპულარული Tools¶
pycodestyle (ყოფილი pep8)¶
ყველაზე მარტივი PEP 8 checker
flake8 - ყველაზე პოპულარული¶
pycodestyle + pyflakes + mccabe complexity
# ინსტალაცია
pip install flake8
# გამოყენება
flake8 myfile.py
# კონფიგურაცია .flake8 ფაილში
[flake8]
max-line-length = 88
exclude = .git,__pycache__,venv
pylint - ყველაზე სრული¶
მოიცავს PEP 8 + კოდის ხარისხის შემოწმებას
black - ავტომატური Formatter¶
"The Uncompromising Code Formatter"
# ინსტალაცია
pip install black
# გამოყენება - ავტომატურად აფორმატებს
black myfile.py
black myproject/
# შემოწმება გარეშე შეცვლისა
black --check myfile.py
autopep8 - ავტომატური შესწორება¶
3.2 პრაქტიკული მაგალითი¶
# ❌ PEP 8 დარღვევები
def calculatePrice(items,discount=0,tax= 0.1 ):
total=0
for item in items:
total+=item['price']
if discount>0:
total=total-discount
total=total*(1+tax)
return total
# ✅ PEP 8 შესაბამისი
def calculate_price(items, discount=0, tax=0.1):
"""
Calculate total price with discount and tax.
Args:
items (list): List of item dictionaries
discount (float): Discount amount
tax (float): Tax rate (default 0.1)
Returns:
float: Final price
"""
total = 0
for item in items:
total += item['price']
if discount > 0:
total = total - discount
total = total * (1 + tax)
return total
3.3 Checkers-ის შედარება¶
| Tool | რას აკეთებს | სირთულე | რეკომენდაცია |
|---|---|---|---|
| pycodestyle | PEP 8 შემოწმება | მარტივი | დამწყებთათვის |
| flake8 | PEP 8 + შეცდომები | საშუალო | ყველასთვის |
| pylint | სრული ანალიზი | რთული | პროექტებისთვის |
| black | ავტო-ფორმატირება | მარტივი | ყველასთვის |
| autopep8 | ავტო-შესწორება | მარტივი | სწრაფი fix-ებისთვის |
4. PyPI - Python Package Index¶
რა არის PyPI?¶
PyPI (Python Package Index) - Python პაკეტების ოფიციალური რეპოზიტორია. შეიცავს 500,000+ პაკეტს!
🌐 ვებსაიტი: https://pypi.org
4.1 pip - Package Manager¶
pip არის Python-ის ოფიციალური პაკეტების მენეჯერი.
# პაკეტის ინსტალაცია
pip install requests
pip install numpy pandas matplotlib
# კონკრეტული ვერსია
pip install django==4.2.0
pip install "flask>=2.0.0"
# requirements.txt-დან ინსტალაცია
pip install -r requirements.txt
# პაკეტის მოხსნა
pip uninstall requests
# ინსტალირებული პაკეტების სია
pip list
# პაკეტის ინფორმაცია
pip show requests
# პაკეტების განახლება
pip install --upgrade requests
4.2 requirements.txt¶
პროექტის დამოკიდებულებების ფაილი:
გენერირება:
# ყველა დაინსტალირებული პაკეტის შენახვა
pip freeze > requirements.txt
# ინსტალაცია requirements-დან
pip install -r requirements.txt
4.3 პოპულარული პაკეტები¶
მონაცემთა ანალიზი¶
pip install numpy # რიცხვითი გამოთვლები
pip install pandas # მონაცემთა ანალიზი
pip install matplotlib # ვიზუალიზაცია
Web Development¶
pip install django # Full-stack framework
pip install flask # Micro framework
pip install fastapi # Modern API framework
Machine Learning¶
pip install scikit-learn # ML ალგორითმები
pip install tensorflow # Deep Learning
pip install pytorch # Deep Learning
Utilities¶
pip install requests # HTTP requests
pip install beautifulsoup4 # Web scraping
pip install pillow # Image processing
5. Virtual Environments - ვირტუალური გარემოები¶
რატომ გვჭირდება?¶
თითოეულ პროექტს სჭირდება განსხვავებული პაკეტები და ვერსიები. Virtual Environment იზოლირებულ გარემოს ქმნის.
5.1 venv - Python-ის ჩაშენებული¶
# ვირტუალური გარემოს შექმნა
python -m venv myenv
# გააქტიურება (Windows)
myenv\Scripts\activate
# გააქტიურება (Linux/Mac)
source myenv/bin/activate
# დეაქტივაცია
deactivate
5.2 პრაქტიკული მაგალითი¶
# პროექტის დაწყება
mkdir my_project
cd my_project
# virtual environment-ის შექმნა
python -m venv venv
# გააქტიურება
source venv/bin/activate # Linux/Mac
# ან
venv\Scripts\activate # Windows
# პაკეტების ინსტალაცია
pip install flask requests
# requirements.txt-ის შენახვა
pip freeze > requirements.txt
# სამუშაოს დასრულება
deactivate
6. პარალელი სხვა ენებთან¶
Package Managers შედარება¶
| ენა | Package Manager | რეპოზიტორია | მაგალითი |
|---|---|---|---|
| Python | pip | PyPI | pip install requests |
| JavaScript | npm / yarn | npm registry | npm install express |
| Java | Maven / Gradle | Maven Central | maven: org.springframework |
| Ruby | gem | RubyGems | gem install rails |
| PHP | Composer | Packagist | composer require laravel |
| Rust | Cargo | crates.io | cargo add serde |
| Go | go get | pkg.go.dev | go get github.com/gin-gonic/gin |
| C# | NuGet | NuGet Gallery | dotnet add package Newtonsoft.Json |
პარალელური კონცეფციები¶
# Python
pip install requests
pip freeze > requirements.txt
python -m venv venv
# JavaScript (npm)
npm install axios
npm list --depth=0 > package.json
# node_modules/ (virtual env ექვივალენტი)
# Ruby
gem install rails
gem list > Gemfile
bundle install
# PHP
composer require symfony/http-foundation
composer.json
composer install
7. პრაქტიკული სავარჯიშოები¶
სავარჯიშო 1: PEP 8 შესწორება¶
შეასწორეთ შემდეგი კოდი PEP 8 სტანდარტის მიხედვით:
# ❌ არასწორი კოდი
def calculateTotalPrice(items,discount=0):
total=0
for item in items:
total+=item['price']
if discount>0:total=total-discount
return total
class student:
def __init__(self,name,age):
self.Name=name
self.Age=age
# თქვენი შესწორებული ვერსია აქ:
პასუხი
# ✅ სწორი კოდი
def calculate_total_price(items, discount=0):
"""Calculate total price with optional discount."""
total = 0
for item in items:
total += item['price']
if discount > 0:
total = total - discount
return total
class Student:
"""Represents a student with name and age."""
def __init__(self, name, age):
self.name = name
self.age = age
სავარჯიშო 2: Virtual Environment პრაქტიკა¶
შექმენით პროექტი virtual environment-ით:
# 1. შექმენით საქაღალდე "weather_app"
# 2. შექმენით virtual environment
# 3. დააინსტალირეთ requests და beautifulsoup4
# 4. შეინახეთ requirements.txt
# 5. შექმენით მარტივი სკრიპტი რომელიც იყენებს requests-ს
# თქვენი ბრძანებები აქ:
სავარჯიშო 3: flake8 გამოყენება¶
# 1. დააინსტალირეთ flake8
# 2. შექმენით test.py ფაილი PEP 8 დარღვევებით
# 3. გაუშვით flake8 და გამოასწორეთ ყველა შეცდომა
8. Best Practices - საუკეთესო პრაქტიკა¶
8.1 პროექტის სტრუქტურა¶
my_project/
│
├── venv/ # Virtual environment (არ უნდა git-ში!)
├── src/ # Source code
│ ├── __init__.py
│ ├── main.py
│ └── utils.py
├── tests/ # Tests
│ ├── test_main.py
│ └── test_utils.py
├── requirements.txt # Dependencies
├── .gitignore # Git ignore file
├── README.md # Documentation
└── setup.py # Package setup
8.2 .gitignore მაგალითი¶
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
# Virtual Environment
venv/
env/
ENV/
# IDEs
.vscode/
.idea/
*.swp
# OS
.DS_Store
Thumbs.db
8.3 რჩევები¶
- ყოველთვის გამოიყენეთ Virtual Environment
- ყოველთვის შეინახეთ requirements.txt
- გაუშვით flake8 ან black კოდის შემოწმებისთვის
- დაწერეთ docstrings ფუნქციებისთვის
- გამოიყენეთ Type Hints (Python 3.5+)
from typing import List, Dict, Optional
def process_data(items: List[Dict],
limit: Optional[int] = None) -> Dict:
"""
Process data items.
Args:
items: List of data dictionaries
limit: Optional limit for processing
Returns:
Processed data dictionary
"""
pass
9. დამატებითი რესურსები¶
ოფიციალური დოკუმენტაცია¶
- 📘 PEP 8: https://pep8.org
- 📦 PyPI: https://pypi.org
- 🐍 Python Docs: https://docs.python.org
Tools¶
- 🔧 flake8: https://flake8.pycqa.org
- ⚫ black: https://black.readthedocs.io
- 📊 pylint: https://pylint.org
სასწავლო მასალები¶
- Real Python: https://realpython.com
- Python Package Index Guide: https://packaging.python.org
დასკვნა¶
✅ PEP 8 - თქვენი კოდი უნდა იყოს სუფთა და თანმიმდევრული
✅ Style Checkers - გამოიყენეთ flake8 და black
✅ PyPI - უზარმაზარი პაკეტების ბიბლიოთეკა
✅ Virtual Environments - თითოეული პროექტისთვის იზოლირებული გარემო
✅ pip - მარტივი და ძლიერი package manager
კარგი სტილი და პაკეტების სწორი მართვა - პროფესიონალი დეველოპერის ნიშანია! 🚀