Structurarea importurilor

Dezvoltarea pachetelor Python

James Fulton

Climate informatics researcher

Fără importuri de pachete

import mysklearn
help(mysklearn.preprocessing)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'mysklearn' has no 
  attribute 'preprocessing'

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py
|-- preprocessing
|   |-- __init__.py
|   |-- normalize.py
|   |-- standardize.py
|-- regression
|   |-- __init__.py
|   |-- regression.py
|-- utils.py
Dezvoltarea pachetelor Python

Fără importuri de pachete

import mysklearn.preprocessing
help(mysklearn.preprocessing)
Help on package mysklearn.preprocessing in 
mysklearn:

NAME
    mysklearn.preprocessing - A subpackage 
      for standard preprocessing operations.

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py
|-- preprocessing
|   |-- __init__.py
|   |-- normalize.py
|   |-- standardize.py
|-- regression
|   |-- __init__.py
|   |-- regression.py
|-- utils.py
Dezvoltarea pachetelor Python

Fără importuri de pachete

import mysklearn.preprocessing
help(mysklearn.preprocessing.normalize)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 
  'mysklearn.preprocessing' has no attribute
  'normalize'

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py
|-- preprocessing
|   |-- __init__.py
|   |-- normalize.py
|   |-- standardize.py
|-- regression
|   |-- __init__.py
|   |-- regression.py
|-- utils.py
Dezvoltarea pachetelor Python

Fără importuri de pachete

import mysklearn.preprocessing.normalize
help(mysklearn.preprocessing.normalize)
Help on module mysklearn.preprocessing.normalize
in mysklearn.preprocessing:

NAME
    mysklearn.preprocessing.normalize - A module
      for normalizing data.

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py
|-- preprocessing
|   |-- __init__.py
|   |-- normalize.py
|   |-- standardize.py
|-- regression
|   |-- __init__.py
|   |-- regression.py
|-- utils.py
Dezvoltarea pachetelor Python

Importul subpachetelor în pachete

mysklearn/__init__.py

Import absolut

from mysklearn import preprocessing
  • Cel mai utilizat — mai explicit

Import relativ

from . import preprocessing
  • Utilizat uneori — mai scurt și mai simplu

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py        <--
|-- preprocessing
|   |-- __init__.py
|   |-- normalize.py
|   |-- standardize.py
|-- regression
|   |-- __init__.py
|   |-- regression.py
|-- utils.py
Dezvoltarea pachetelor Python

Importul modulelor

Am importat preprocessing în mysklearn

import mysklearn
help(mysklearn.preprocessing)
Help on package mysklearn.preprocessing in 
mysklearn:

NAME
    mysklearn.preprocessing - A subpackage 
      for standard preprocessing operations.

Dar preprocessing nu are legătură cu normalize

import mysklearn
help(mysklearn.preprocessing.normalize)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 
  'mysklearn.preprocessing' has no attribute
  'normalize'
Dezvoltarea pachetelor Python

Importul modulelor

mysklearn/preprocessing/__init__.py

Import absolut

from mysklearn.preprocessing import normalize

Import relativ

from . import normalize

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py
|-- preprocessing
|   |-- __init__.py    <--
|   |-- normalize.py
|   |-- standardize.py
|-- regression
|   |-- __init__.py
|   |-- regression.py
|-- utils.py
Dezvoltarea pachetelor Python

Restructurarea importurilor

import mysklearn
help(mysklearn.preprocessing.normalize.normalize_data)
Help on function normalize_data in module
mysklearn.preprocessing.normalize:

normalize_data(x)
    Normalize the data array.
Dezvoltarea pachetelor Python

Importul unei funcții în subpachet

mysklearn/preprocessing/__init__.py

Import absolut

from mysklearn.preprocessing.normalize import \
    normalize_data

Import relativ

from .normalize import normalize_data

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py
|-- preprocessing
|   |-- __init__.py    <--
|   |-- normalize.py
|   |-- standardize.py
|-- regression
|   |-- __init__.py
|   |-- regression.py
|-- utils.py
Dezvoltarea pachetelor Python

Importul unei funcții în subpachet

import mysklearn
help(mysklearn.preprocessing.normalize_data)
Help on function normalize_data in module
mysklearn_imp.preprocessing.normalize:

normalize_data(x)
    Normalize the data array.
Dezvoltarea pachetelor Python

Importul între module surori

În normalize.py

Import absolut

from mysklearn.preprocessing.funcs import (
    mymax, mymin
)

Import relativ

from .funcs import mymax, mymin

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py
|-- preprocessing
|   |-- __init__.py
|   |-- normalize.py   <--
|   |-- funcs.py
|   |-- standardize.py
|-- regression
|   |-- __init__.py
|   |-- regression.py
|-- utils.py
Dezvoltarea pachetelor Python

Importul între module aflate la distanță

O excepție personalizată MyException se află în utils.py

În normalize.py, standardize.py și regression.py

Import absolut

from mysklearn.utils import MyException

Import relativ

from ..utils import MyException

Arborele de directoare pentru pachetul cu subpachete

mysklearn/
|-- __init__.py
|-- preprocessing
|   |-- __init__.py
|   |-- normalize.py   <--
|   `-- standardize.py <--
|-- regression
|   |-- __init__.py
|   |-- regression.py  <--
`-- utils.py
Dezvoltarea pachetelor Python

Ghid rapid: importuri relative

  • from . import module
    • Din directorul curent, importă module
  • from .. import module
    • Din directorul părinte, importă module
  • from .module import function
    • Din modulul din directorul curent, importă function
  • from ..subpackage.module import function
    • Din subpachetul din directorul părinte, din module, importă function
Dezvoltarea pachetelor Python

Să exersăm!

Dezvoltarea pachetelor Python

Preparing Video For Download...