distutils: PDF Handout - Berthold Höllmann: Vorträge bei der

Werbung
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
Herunterladen