Konzepte
- Buildout
- erlaubt, identische Entwicklungsumgebungen einfach aufzusetzen. Hierzu nutzt buildout die Fähigkeit der setuptools, automatisch Abhängigkeiten aufzulösen und Aktualisierungen durchzuführen (s.a.: Jim Fulton: Buildout Tutorial).
- Python Eggs
- sind ein Deploymentformat für Python-Packages. Sie enthalten ein setup.py-Skript mit Metainformationen (Lizenz, Abhängigkeiten, etc.) Mit der Python-Bibliothek Setuptools können solche Abhängigkeiten automatisch nachgeladen werden, wobei in Eggs spezifische Versionen angegeben werden können.
- Python Package Index PyPI (aka Cheese Shop)
- Index mit tausenden von Python-Paketen. Setuptools, easy_install und Buildout nutzen diesen Index, um Eggs automatisch zu installieren.
- EasyInstall
- Python-Modul mit dem der Python Package Index durchsucht werden kann und das die Pakete in die globale Python-Umgebung installiert. Wir werden nur Buildout mit EasyInstall installieren, alle weiteren Eggs werden von Buildout in das lokale Buildout-Projekt heruntergeladen, unter anderem um Versionskonflikte zu vermeiden.
Installation
Bevor zc.buildout installiert werden kann, sind folgende Schritte erforderlich:
Installation von Python.
Anforderungen
- bash oder eine andere Shell
- ein C- und C++-Compiler
- GNU make
- Zope setzt das Python-zlib-Modul voraus, das Python beim Kompilieren erstellt sofern zlib.h in /usr/include installiert ist.
Für diese Anforderungen müssten auf Debian- und Ubuntu-Systemen folgende Pakete installiert werden:
$ sudo apt-get install build-essential zlib1g-dev
oder:
$ sudo yum install make gcc-c++ zlib-devel
Falls Sie die SSL-Bibliotheken benötigen, z.B. zum Verschicken von Mails mit TLS, sollten Sie auf Debian- und Ubuntu-Systemen das OpenSSL- Paket installieren:
$ sudo apt-get install libssl-dev
oder:
$ sudo yum install openssl-devel
Mir der GNU Readline-Bibliothek können Sie im Python-Prompt die zuletzt eingegebenen Befehle erneut aufrufen:
$ sudo apt-get install libreadline6-dev
Für die Indizierung von Word- und PDF-Dokumenten werden darüberhinaus noch die folgenden Pakete benötigt:
$ sudo apt-get install wv poppler-utils
oder:
$ sudo yum install wv poppler-utils
Erstellen und Installieren
Anmerkung 1: Im Folgenden wird Python 2.7 für Plone 4.3 installiert. Für Plone 4.1 und 4.0 benötigen Sie jedoch Python 2.6 und für Plone 3 Python 2.4. Die Installationsschritte sind jedoch weiterhin dieselben sodass Sie einfach 2.7 durch 2.4 ersetzen können.
Gehen Sie in das Verzeichnis, in dem Sie die aktuelle Python- Version installieren möchten, z.B. in /opt/. Anschließend laden Sie das Python-Paket herunter und entpacken es:
# curl -O http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz # tar -xvzf Python-2.7.5.tgz
Installieren Sie das Python-2.7.5-Paket:
# cd Python-2.7.5 # ./configure --prefix=/opt/python/2.7.5
- --prefix
Python-Installationspfad. Ohne Angabe wird Python in /usr/local erstellt.
Anschließend fahren Sie mit der Installation fort:
# make # make install
Anmerkung 2: Ab Ubuntu 11.04 mit der Einführung des multiarch-Features werden manche Bibliotheken in architekturspezifischen Verzeichnissen gespeichert, so z.B. in /usr/lib/x86_64-linux-gnu/libz.so. Die setup.py-Datei von Python 2.4 und 2.6 verwendet jedoch hartkodierte Pfade wodurch manche erforderlichen Bibliotheken zunächst nicht gefunden werden. In diesem Fall müssen die Pfade explizit angegeben werden:
# make distclean # export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)" # ./configure # make # make install # unset LDFLAGS
Der Python-Interpreter kann nun in PATH eingetragen werden. Hierzu wird folgendes in die ~/.bashrc (oder auf dem Mac in ~/.bash_profile) eingetragen:
export PATH=/opt/python/2.7.5/bin:$PATH
Danach kann die Konfiguration neu eingelesen werden mit:
$ source ~/.bashrc
Buildout benötigt zusätzlich auch noch easy_install:
# mkdir /opt/python/2.7.5/Extensions # cd $_ # curl -O http://peak.telecommunity.com/dist/ez_setup.py # python ez_setup.py
Welche Versionen dieser Python-Pakete mit easy_install installiert wurde, erfahren Sie indem Sie das jeweilige Skript aufrufen mit der Option --version.
Wollen Sie zu einem späteren Zeitpunkt eines dieser Python-Pakete aktualisieren, so können Sie dies mit der Option -U, also z.B.:
# easy_install -U setuptools
Sie können auch spezifische Versionen angeben, z.B.:
# easy_install setuptools==dev06
Anmerkung 3: Verwenden Sie z.B. Subversion 1.5 zusammen mit Buildout und erhalten folgende Fehlermeldung:
NameError: global name 'log' is not defined
dann benötigen Sie mindestens die dev06-Version der setuptools. Dies erhalten Sie mit:
# easy_install setuptools>=dev06
Mac OS X
Installieren der OSX development tools (XCode).
Installieren von Macports.
Um bootstrap.py aufzurufen, sollte folgender Befehl verwendet werden um zu gewährleisten, dass der Python-Interpreter von Macports verwendet wird:
$ python2.7 bootstrap.py
Weitere Informationen
- Buildout hinter einem Proxy
Häufig kann Buildout nicht direkt auf die Quellen zugreifen um Python Eggs o.ä.herunterzuladen. In diesem Fall sollte der Proxy zunächst als Environment-Variable z.B. in der ~/.bashrc-Datei angegeben werden:
export http_proxy = http://localhost:8123/ export https_proxy = http://localhost:8123/
Alternativ kann auch über einen ssh-Tunnel auf den entfernten Server zugegriffen werden:
$ ssh -L 8123:localhost:8123 yourserver.com
- Setzen des LD_LIBRARY_PATH
LD_LIBRARY_PATH ist eine Unix-Environment-Variable, die angibt, aus welchem Verzeichnis dynamisch verlinkte Bibliotheken (*.so-Dateien) geladen werden sollen. Falls die systemweit verfügbaren Bibliotheken überschrieben werden sollen, kann dies mit environment-vars aus dem zope2instance-Rezept geschehen:
[instance] … # Use statically compiled libxml2 environment-vars = LD_LIBRARY_PATH ${buildout:directory}/parts/lxml/libxml2/lib:${buildout:directory}/parts/lxml/libxslt/libs.a. Issue 11715: Building Python on multiarch Debian and Ubuntu - Python tracker.