W najprostszym przypadku moduły zawierają kod napisany w języku Python. Moduły mogą też odpowiadać rozszerzeniom napisanym w innych językach zewnętrznych, takich jak C, Java czy C#.
Rozszerzenia zewnętrzne do Pythona zazwyczaj wykorzystują narzędzia z pakietu distutils z biblioteki standardowej do automatycznej instalacji. Zwykle tworzy się skrypt setup.py wykonywany w celu instalacji rozszerzeń.
Każdy moduł ma wbudowany atrybut __name__, który Python automatycznie ustawia w następujący sposób:
W rezultacie zmienna __name__ modułu służy jako opcja trybu użycia, pozwalając na wykorzystanie kodu zarówno w postaci biblioteki i jak i skryptu najwyższego poziomu.
Nazwa pliku: 'starwars.py' Nazwa modułu: 'starwars' __name__ == '__main__' jeżeli moduł działa jako program najwyższego poziomu, __name__ == 'starwars' jeżeli moduł był importowany.
#!/usr/bin/python module_docstring # opcjonalnie # imports import sys # constants # exception classes # interface functions # classes # internal functions and classes def tester(): # funkcja testująca moduł instructions if __name__ == "__main__": # testujemy, jeżeli moduł nie jest importowany status = tester() sys.exit(status)
Jeżeli wykonujemy import modułu za pomocą instrukcji from *, to istnieją dwa sposoby, aby zapobiec skopiowaniu wszystkich zmiennych z modułu do modułu głównego i zanieczyszczenia przestrzeni nazw.
__all__ = ["MyError", "encode", "decode"] # eksportuje tylko te zmienne
Python najpierw szuka w module listy __all__, a jeżeli jej nie znajdzie, to kopiowane są wszystkie zmienne niezawierające znaku pojedyńczego podkreślenia. Należy podkreślić, że te dwa podane sposoby (konwencje) mają znaczenie jedynie dla instrukcji from * i nie mają nic wspólnego z deklarowaniem zmiennej jako prywatnej.