Installation

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:

  1. Installation von Python.

    1. 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
      
    2. 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
      
  2. 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
    
  3. 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==0.9.8
    

    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

  1. Installieren der OSX development tools (XCode).

  2. Installieren von Macports.

  3. 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/lib

s.a. Issue 11715: Building Python on multiarch Debian and Ubuntu - Python tracker.