Installieren und Verteilen von Python Modulen Authors: Date: Version: Berthold Höllmann 2009-09-29 23:24:38 +0200 (Di, 29 Sep 2009) 24 Inhalt 1 Einleitung 2 2 Installieren von Python Modulen 2 3 Einfaches Beispiel 2 4 Einfaches Beispiel (Paket) 2 5 Paketquellen in Unterverzeichnis 3 6 Übersetzen von Erweiterungen 3 7 Erweiterungen organisiert in Paketen 3 8 Erweiterungen organisiert in Paketen (2) 3 9 Unterstützte Programmiersprachen 4 10 Weitere Programmiersprachen (Fortran) 4 11 Weitere Programmiersprachen (Cython) 4 12 Bibliotheken für Erweiterungs Module 4 13 Quellcode Bibliotheken 4 14 Daten (zum Paket gehörend) 5 15 Daten (sonstige) 5 16 Skripte 5 17 setup.py Kommandos: build 5 18 setup.py Kommandos: build (2) 5 19 setup.py Kommandos: clean 5 20 setup.py Kommandos: install 5 1 21 setup.py Kommandos: install (2) 6 22 Verteilen von Python Modulen 6 23 setup.py Kommandos: *dist* 6 24 Zusätzliche Dateien 6 25 setup.py Kommandos: register 6 26 classifiers 6 27 Verteilen der Module 6 28 easy_install 6 29 Diskussion 7 1 Einleitung distutils dienen zum installieren und verbreiten von Python Modulen und Erweiterungsmodulen. Die Dokumentation ist nicht besonders ausführlich. Die Befehle zur Installation wissen“ wo die Dateien abzulegen sind. ” 2 Installieren von Python Modulen Zuerst wird das installieren von Python Modulen behandelt. • Kopieren and die korrekte Stelle im Dateibaum, damit Python die installieren Module findet • Übersetzen von Erweiterungsmodule • Installation von externen Dateien (Bilder für GUIs, Template Dateien, etc.) 3 Einfaches Beispiel Eine erste setup.py Datei: from distutils.core import setup setup(name=’foo’, version=’1.0’, py_modules=[’foo’], ) Das Kommando python setup.py install installiert foo.py in das site-packages Verzeichnis der Python installation, und das Modul steht dann über import foo zur Verfügung. 4 Einfaches Beispiel (Paket) setup.py: 2 from distutils.core import setup setup(name=’foo’, version=’1.0’, packages=[’bar’], ) Das Kommando python setup.py install installiert alle *.py Dateien im Verzeichnis bar in das Unterverzeichnis bar unter site-packages. bar muss ein Python Paket enthalten, also zumindest eine __init__.py Datei. 5 Paketquellen in Unterverzeichnis Befinden sich das Verzeichnis eines Pakets nicht im gleichen Verzeichnis wie die setup.py Datei, so gibt man der setup Funktion das Argument package_dir mit, Befinden sich das Paketverzeichnis im Unterverzeichnis src so ist die Option: package_dir = {’’: ’src’} Soll der Inhalt des Verzeichnisses src als Paket bar installiert werden, so ist die Option: package_dir = {’bar’: ’src’} 6 Übersetzen von Erweiterungen Für das Erstellen von Erweiterungsmodulen importiert man die Klasse Extension von distutils.core: from distutils.core import setup, Extension In der einfachsten Form bekommt die Klasse bei der Initialisierung den Namen des Moduls und eine Liste mit den Quelldatein übergeben: setup(name=’foo’, version=’1.0’, ext_modules=[Extension(’foo’, [’foo.c’])], ) 7 Erweiterungen organisiert in Paketen Soll eine Erweiterung in einem Unterpaket installiert werden, so kann dies einfach durch den Paketnamen ausgedrückt werden: Extension(’pkg.foo’, [’src/foo.c’]) 8 Erweiterungen organisiert in Paketen (2) Sollen mehrere Erweiterungen in ein Paket installiert kann man das Argument ext_package benutzen: setup(..., ext_package=’pkg’, ext_modules=[Extension(’foo’, [’foo.c’]), Extension(’subpkg.bar’, [’bar.c’])], ) Hier werden die Erweiterungen pkg.foo und pkg.subpkg.bar erstellt und installiert. 3 9 Unterstützte Programmiersprachen distutils unterstützen C, C++, Objective-C und SWIG Quellen. Die Programmiersprache wird anhand der Dateiendung ermittelt: .c : C Code .cc, .cpp, .cxx : C++ Code .m : Objective-C Code .i : SWIG inteface code Alternativ kann die Sprache über das Argument language angegeben werden ("c", "c++" oder "objc"). 10 Weitere Programmiersprachen (Fortran) Verschiedene Python Erweiterungen bringen Unterstützung für weitere Programmiersprachen: numpy: from numpy.distutils.core import Extension Fortran (f90, f95, f77, for, ftn, f), f2py (pyf) pyf -> c -> .o 11 Weitere Programmiersprachen (Cython) Cython: from from Cython.Distutils import build_ext setup(cmdclass = {’build_ext’: build_ext}, ...) Cython definition files (pyx) pyx -> c -> .o 12 Bibliotheken für Erweiterungs Module Es gibt zwei Arten von Bibliotheken: 1. Externe binäre Bibliotheken: Extension(..., libraries=[’gdbm’, ’readline’]) 2. Quellcode der als Bibliothek gebaut, und an das Modul gelinkt werden soll (nicht dokumentiert): Extension(..., libraries=[("fuzz", {"sources": ["lib/fuzz.c"]})], ...) 13 Quellcode Bibliotheken Bibliotheken die im Quellcode angegeben werden können bei setup aus numpy auch Fortran code enthalten. Fortran compiler wird dann auch zum Linken benutzt um die korrekte Laufzeitumgebung anzubinden. 4 14 Daten (zum Paket gehörend) Daten die mit dem Modul installiert werden sollen können werden mit dem Argument package_data angegeben: package_data={’data’: ’data_src/*.dat’} Alle *.dat Dateien aus dem Quellverzeichnis data_src werden in das Verzeichnis data unter dem Ziel Modulverzeichnis installiert. 15 Daten (sonstige) Sonstige Daten werden mit Zielverzeichnis mit dem Argument data_files angegeben: data_files=[(’bitmaps’, [’bm/b1.gif’, ’bm/b2.gif’]), (’config’, [’cfg/data.cfg’]), (’/etc/init.d’, [’init-script’])] Relative Pfade: Installationspfad relativ zu sys.exec_prefix, absolute Pfade: Installation wie angegeben. 16 Skripte Skripte werden in das Verzeichnis sys.exec_prefix/bin, bzw. sys.exec_prefix\Scripts installiert.: scripts=[’apps/first_run’, ’apps/second_run’] 17 setup.py Kommandos: build build Baut alles was für eine Installation benötigt wird build_py kopiert reine Python Module in das build Verzeichnis build_scripts Kopiert Skripte und passt #! Zeile an 18 setup.py Kommandos: build (2) build_ext Übersetzt und Linkt C/C++ etc. Erweiterungen in das build Verzeichnis build_clib Baut C/C++ etc. Bibliotheken die von Erweiterungen benutzt werden 19 setup.py Kommandos: clean Räumt temporäre Dateien im build Verzeichnis auf 20 setup.py Kommandos: install install Installiert alles aus dem build Verzeichnis install_lib Installiert alle Python Module (Erweiterungen und reine Python Module) 5 21 setup.py Kommandos: install (2) install_headers Installiert C/C++ header Dateien install_scripts Installiert Scripte install_data Installiert Daten Dateien 22 Verteilen von Python Modulen distutils unterstützen auch das Verteilen von Python Modulen Windows installer, Quell- und Binär tar Archive, sowie rpm’s können erstellt werden. 23 setup.py Kommandos: *dist* sdist Erzeugt Quellpakete (tarball, zip file, etc.) abhängig von der Plattform bdist, bdist_dumb Erzeugt ein rudimentäres gebautes Archiv bdist_rpm Erzeugt ein rpm archiv bdist_wininst erzeugt einen Windows Installer 24 Zusätzliche Dateien Zusätzliche Dateien, die mit verteilt werden sollen, jedoch bei einer Installation über python setup.py install nicht berücksichtigt werden müssen, können über eine MANIFEST.in oder MANIFEST Datei angegeben werden. Es können rekursiv Dateien angegeben werden.: include *.txt recursive-include examples *.txt *.py prune examples/sample?/build 25 setup.py Kommandos: register register Registriert das Paket beim Python package index 26 classifiers Zur Registrierung sollte dann das Argument classifiers des setup Befehls gesetzt sein. Diese vorgegebenen Werte geben Auskunft über Entwicklungsstatus, Lizenz, Softwarekategorie etc. 27 Verteilen der Module In der Doku Distributing Python Modules sollte man dann nachlesen wie man seine Pakete hochläd. Die Pakete können signiert werden. 28 easy_install Wenn das Paket registriert und hochgeladen ist kann es vom Nutzer mit dem Kommandozeilenprogramm easy_install aus dem Paket setuptools : http://peak.telecommunity.com/DevCenter/setuptools auf dem Zielrechner einfach installiert und aktualisiert werden. 6 29 Diskussion ??? Hamburger Python User Group • 2009/10/01 View document source. Generated on: 2009-09-30 21:53 UTC. Generated by Docutils from reStructuredText source. 7