Skip to content

Come importare moduli, pacchetti, funzioni, ecc. in Python

Python

In Python, puoi importare la libreria standard, i pacchetti installati con pip, i tuoi pacchetti e così via, con l’istruzione import.

In questo articolo vengono descritti i seguenti contenuti.

  • Moduli, pacchetti e librerie in Python
  • Utilizzo di base dell’importazione
  • Come scrivere importa come consigliato in PEP8
  • Importa funzioni, variabili, classi, ecc.:from ... import ...
  • Importa con un alias:import ... as ...
  • Importa da pacchetti
  • Errori comuni relativi all’importazione
    • Errore modulo non trovato
    • AttributeError

Vedere l’articolo seguente per il percorso di ricerca del modulo.

Moduli, pacchetti e librerie in Python

Moduli

In Python, un modulo è un file che definisce funzioni, classi, ecc.

Pacchi

La directory contenente i moduli e __init__.py è chiamata “pacchetti regolari”. __init__.py può essere un file vuoto.

In Python 3.3 e versioni successive, le directory che non contengono __init__.py possono importate come pacchetti. Tali pacchetti sono chiamati “pacchetti dello spazio dei nomi”.

Biblioteche

se non sono rigorosamente definiti, pacchetti e moduli sono chiamati a volte librerie.

Utilizzo di base dell’importazione

Ad esempio, importa il modulo matematico.

Con import , un modulo viene importato come oggetto del tipo di modulo. Puoi controllare quale file è importato con print().

import math

print(type(math))
# <class 'module'>

print(math)
# <module 'math' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/math.cpython-37m-darwin.so'>

È possibile utilizzare funzioni e variabili definite nel modulo con ., .,

print(math.radians(180))
# 3.141592653589793

print(type(math.radians))
# <class 'builtin_function_or_method'>

print(math.pi)
# 3.141592653589793

print(type(math.pi))
# <class 'float'>

Se si desidera utilizzare direttamente le funzioni o le variabili di un modulo, utilizzare da utilizzare di seguito. Nota che importa. generi un errore.

Come scrivere importa come consigliato in PEP8

PEP8, la guida allo stile di Python, descrivi come scrivere l’istruzione import.

Nota che questa è solo una guida di stile, quindi non ci sono errori anche se non la scrivi in ​​questo modo.

Importa più moduli

È possibile scrivere più moduli separati da virgole dopo l’istruzione import, ma questo non è consigliato in PEP8. Le camere separate di solito dovrebbero essere su linee.

# NG
import os, sys

# OK
import os
import sys

Se usi da per importare funzioni, variabili, classi, ecc., come spiegato di seguito, puoi separarle con una virgola.

from math import pi, radians

Ordine dei moduli

Si consiglia di raggruppare e importare i moduli nel seguente ordine, a seconda del tipo. Separa ogni gruppo con una riga vuota.

  1. Standard di libreria
  2. Librerie di terze parti
  3. Biblioteche locali

pur non sia scritto in PEP8, ogni modulo in un gruppo è spesso ordinato in ordine alfabetico.

import math
import os
import sys

import Requests

import my_package1
import my_package2

Importa funzioni, variabili, classi, ecc.:from ... import ...

È possibile specificare e importare funzioni, variabili, classi, ecc. definito nel modulo con da … import ….

Importa un solo elemento

È possibile importare funzioni e così via da import.

Gli articoli importati possono essere utilizzati direttamente con . Il modulo stesso non viene importato. Error NameError viene generato quando si tenta di utilizzare altri elementi.

from math import pi

print(pi)
# 3.141592653589793

# print(math.radians(180))
# NameError: name 'math' is not defined

Importa più elementi contemporaneamente

Puoi importare più funzioni, variabili, ecc. dallo stesso modulo contemporaneamente scrivendole separate da virgole.

from math import pi, radians

print(pi)
# 3.141592653589793

print(radians(180))
# 3.141592653589793

Se una linea è troppo lunga, puoi usare le parentesi () per interrompere la linea.

from math import (
    e,
    exp
)

print(e)
# 2.718281828459045

print(exp(1))
# 2.718281828459045

Importa tutti gli articoli con * (non consigliato)

Con * vengono importate tutte le funzioni, variabili, ecc. definito nel modulo.

from math import *

print(pi)
# 3.141592653589793

print(cos(0))
# 1.0

print(sin(0))

Se __all__ è definito in un modulo, vengono importati solo i nomi in __all__.

Si noti che l’importazione utilizzando * non è consigliata in PEP8 perché non è chiaro quale nome esiste in quale dei nomi.

Importa con un alias:import ... as ...

Puoi usare come per importare con un alias. Se viene fornito un alias, il nome originale non può essere utilizzato.

Esempio di dare un alias a un modulo:

import math as m

print(m.pi)
# 3.141592653589793

# print(math.pi)
# NameError: name 'math' is not defined

Esempio di dare un alias a una variabile:

from math import pi as PI

print(PI)
# 3.141592653589793

# print(pi)
# NameError: name 'pi' is not defined

Alcune librerie, come NumPy e Pandas, sono abitualmente importate con nomi abbreviati.

import numpy as np
import pandas as pd

Importa da pacchetti

Quando importi moduli da un pacchetto, devi fare attenzione a come importarli, a seconda della loro struttura e __init__.py.

Fondamentalmente, la documentazione ti dice come importare i file, quindi segui semplicemente le istruzioni. Ecco degli esempi per spiegare che ci sono vari modelli.

urllib

Ad esempio, importa moduli e classi dalla libreria standard, urllib.

I file (moduli) vengono archiviati nella directory urllib come segue. __init__.py è vuoto.

urllib/
├── __init__.py
├── error.py
├── parse.py
├── request.py
├── response.py
└── robotparser.py

Se scrivi import urllib, non puoi utilizzare i moduli sotto di esso. Ad esempio, urllib.error genera un errore AttributeError.

import urllib

print(type(urllib))
# <class 'module'>

print(urllib)
# <module 'urllib' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/__init__.py'>

# print(urllib.error)
# AttributeError: module 'urllib' has no attribute 'error'

Devi importare i moduli con importare ..

import urllib.error

print(urllib.error)
# <module 'urllib.error' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/error.py'>

print(urllib.error.HTTPError)
# <class 'urllib.error.HTTPError'>

Puoi anche scrivere da import .

from urllib import error

print(error)
# <module 'urllib.error' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/error.py'>

print(error.HTTPError)
# <class 'urllib.error.HTTPError'>

È anche possibile specificare una classe definita nel modulo e importarla.

from urllib.error import HTTPError

print(HTTPError)
# <class 'urllib.error.HTTPError'>

Nota che se il codice per l’inizializzazione non è scritto in __init__.py in questo modo, devi importare il modulo sotto di esso.

Se stai usando IPython/Jupyter Notebook, puoi usare urllib.parse semplicemente importando urllib. Questo comportamento è causato dal processo di avvio di IPython.

collezioni

Come esempio diverso, introduci le raccolte.

La directory delle raccolte è composta da quanto segue.

collections/
├── __init__.py
└── abc.py

Nelle raccolte, classi come Counter e OrderedDict sono definiti in __init__.py invece di memorizzare file di modulo come urllib.

In tal caso, quando importi un pacchetto, puoi utilizzare la classe come ..

import collections

print(collections)
# <module 'collections' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/collections/__init__.py'>

print(collections.Counter)
# <class 'collections.Counter'>

Non puoi importare classi con ..

# import collections.Counter
# ModuleNotFoundError: No module named 'collections.Counter'

Puoi importare classi con da.

from collections import Counter

print(Counter)
# <class 'collections.Counter'>

NumPy

Esempio di una libreria di terze parti, NumPy:

In NumPy, ogni sottopacchetto viene importato in __init__.py nella directory numpy.

Non è necessario importare ogni modulo. Basta scrivere import numpy come np per utilizzare varie funzioni.

scikit-imparare

Il caso di scikit-learn è diverso.

scikit-learn non importa i sottopacchetti in __init__.py nella directory sklearn.

È necessario importare i sottopacchetti in modo esplicito, come segue.

from sklearn import datasets, model_selection, svm, metrics

Errore modulo non trovato

Errore che il modulo non può essere trovato.

ModuleNotFoundError: No module named 'xxx'

Il nome del modulo o il percorso di ricerca del modulo potrebbe essere errato.

Come mostrato nell’esempio delle raccolte sopra, ModuleNotFoundError viene generato anche quando si tenta di importare una classe anziché un modulo. Usa da per importare una funzione o una classe.

AttributeError

Errore che il modulo importato non ha l’attributo specificato.

AttributeError: module 'xxx' has no attribute 'yyy'

È possibile che il file corretto non sia importato.

Ad esempio, quando si scrive import , la prima priorità per la ricerca del modulo è la stessa directory del file di script, quindi eseguito se nella directory è presente un file denominato .py, quel file viene importato.

Usa print() per verificare se il file è stato importato dalla posizione prevista e, in caso contrario, rinominare o spostare il file.