Conținut curs
Python Avansat
Despre lecție
  1. Recapitulare module și pachete

    • Definirea modulelor și pachetelor
    • Importarea modulelor și pachetelor
  2. Organizarea pachetelor

    • Structura pachetelor
    • Pachetele de nivel înalt și subpachete
  3. Utilizarea fișierelor __init__.py

    • Rolul fișierelor __init__.py
    • Inițializarea pachetelor și importurile implicite
  4. Importarea relativă

    • Importul relativ în pachete
    • Avantaje și dezavantaje ale importului relativ
  5. Manipularea căii de căutare a modulelor

    • Prezentarea sys.path
    • Adăugarea și eliminarea căilor din sys.path
  6. Modulul importlib

    • Prezentarea modulului importlib
    • Funcții utile pentru lucrul cu module și pachete
  7. Crearea și distribuirea pachetelor

    • Structura pachetelor distribuibile
    • Utilizarea setuptools pentru a crea și instala pachete
  8. Recapitulare și bune practici

    • Rezumatul lecției și a tehnicilor prezentate
    • Bune practici pentru organizarea și utilizarea modulelor și pachetelor

Exemple și exerciții pentru fiecare subpunct:

Exemplu: Structura unui pachet

mypackage/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        module3.py

Exercițiu:

Creați un pachet cu cel puțin două module și un subpachet. Importați funcții din module și subpachete într-un script Python.

Exemplu: Utilizarea fișierelor __init__.py

python
# mypackage/__init__.py
from .module1 import functie1
from .module2 import functie2
python
# script.py
from mypackage import functie1, functie2

functie1()
functie2()

Exercițiu:

Creați un pachet cu un fișier __init__.py care să importe funcții din modulele pachetului. Utilizați aceste funcții într-un script Python.

Exemplu: Importarea relativă

python
# mypackage/module1.py
def functie1():
    pass

# mypackage/module2.py
from . import module1

module1.functie1()

Exercițiu:

Modificați pachetul creat în exercițiile anterioare pentru a utiliza importurile relative între module.

Exemplu: Manipularea căii de căutare a modulelor

python
import sys

sys.path.append("/cale/la/pachet")
sys.path.remove("/cale/la/pachet")

Exercițiu:

Creați un director cu un modul și adăugați directorul în sys.path. Importați modulul într-un script Python.

Exemplu: Modulul importlib

python
import importlib

module = importlib.import_module("math")
print(module.sqrt(4))

importlib.reload(module)

Exercițiu:

Utilizați modulul importlib pentru a importa dinamic un modul și să apelați o funcție din acesta.

Exemplu: Crearea și distribuirea pachetelor

mypackage/
    setup.py
    mypackage/
        __init__.py
        module1.py
        module2.py
python
# setup.py
from setuptools import setup, find_packages

setup(
    name="mypackage",
    version="0.1.0",
    packages=find_packages(),
    install_requires=[],
)

Exercițiu:

Creați un pachet distribuibil cu un fișier setup.py. Instalați pachetul local și utilizați-l într-un script Python.

Rezumat:

În această lecție, am discutat despre lucrul avansat cu module și pachete în Python. Am recapitulat conceptele de bază privind modulele și pachetele și am explorat organizarea pachetelor, inclusiv structura lor și utilizarea subpachetelor.

Am discutat despre rolul fișierelor __init__.py în inițializarea pachetelor și importurile implicite. Am prezentat importul relativ și am comparat avantajele și dezavantajele sale în raport cu importul absolut.

Am explorat manipularea căii de căutare a modulelor prin intermediul variabilei sys.path și am învățat cum să adăugăm și să eliminăm căi din aceasta. Am discutat despre modulul importlib și am prezentat funcții utile pentru lucrul cu module și pachete în Python.

Am abordat crearea și distribuirea pachetelor, explicând structura pachetelor distribuibile și utilizarea setuptools pentru a crea și instala pachete. În final, am recapitulat lecția și am oferit bune practici pentru organizarea și utilizarea modulelor și pachetelor în Python.

Cunoștințele dobândite în această lecție ne vor ajuta să lucrăm cu module și pachete în moduri avansate și să structurăm proiectele noastre într-un mod mai eficient și scalabil. Aceste tehnici sunt utile pentru a crea biblioteci și aplicații reutilizabile, pentru a împărtăși cod între proiecte și pentru a crea pachete distribuibile care pot fi instalate și utilizate de alți dezvoltatori.