Como dito anteriormente, cada arquivo contendo código Python é denominado um módulo. Na grande maioria das ocasiões utilizamos um ou mais módulos Python em combinação: o interpretador interativo é adequado para realizar experimentos curtos, mas não para escrever código de produção.
Um módulo Python consiste de código-fonte contido em um arquivo denominado com a extensão .py; como tal, pode conter variáveis, funções e classes; para fins de nomenclatura, qualquer um destes elementos contidos em um módulo é considerado um atributo do módulo.
Python, através do módulo, oferece excelentes mecanismos para modularizar código-fonte. Esta modularização pode ter diversas motivações: o programa pode ser grande demais, ter sub-partes reusáveis que devem ser separadas, ou ainda necessitar de módulos escritos por terceiros. Esta seção introduz este conceito através do comando import.
A instrução básica para manipular módulos é import. O módulo deve estar no caminho de procura de módulos do interpretador10. No exemplo a seguir, um módulo com o nome os.py é importado. Observe que a extensão .py não é incluída no comando import -- apenas o nome principal:
>>> import os
>>> print os.getcwd()
/home/kiko
O módulo os define algumas funções internamente. No exemplo acima, invocamos a função getcwd() contida neste, prefixando a função com o nome do módulo. É importante esta observação: ao usar a forma import módulo, acessamos os atributos de um módulo usando esta sintaxe, idêntica à utilizada para acessar métodos da lista conforme descrito na seção 2.3.2.
Existe uma segunda forma do comando import que funciona de forma diferente. Ao invés de importar o módulo inteiro, o que nos obriga a usar as funções prefixadas pelo nome do módulo, este formato importa um atributo do módulo, deixando-o acessível localmente:
>>> from os import getcwd
>>> print getcwd()
/home/kiko
Há algumas funções pré-definidas no interpretador bastante úteis quando lidando com módulos e os atributos contidos em módulos:
O mecanismo de importação possui uma série de nuances especiais, que estão associados ao tópico escopo, introduzido na seção anterior, e aos namespaces, que resumidamente determinam o conjunto de atributos acessíveis em um determinado contexto. Uma descrição mais detalhada destes tópicos é oferecida na seção Python Scopes and Name Spaces do tutorial Python.