Bisher habe ich Pelican unter Ubuntu Linux genutzt. Nun möchte ich dies aber auch auf meinem Windows Rechner können. Die Installation ist ein klein wenig anders, daher will ich sie hier beschreiben.

Übersicht in Stichpunkten

  1. Installation von Miniconda
  2. Erstellen und Aktivieren einer Python-Umgebung
  3. Installieren aller benötigten Python-Pakete
  4. Anlage der Webseite
  5. Herunterladen und Einbinden eines Themes
  6. Herunterladen und Einbinden benötigter Plugins
  7. Generierung des Outputs
  8. Nutzung des integrierten Webservers zum Anschauen des Outputs
  9. Upload auf den Webspace

Installation Miniconda

Da ich Python erst mal nur für die Generierung von Webseiten mit Pelican benutze, habe ich mich entschieden statt des großen Anaconda Pakets, das kleinere Miniconda zu nutzen.

Beide richten auf dem Computer Conda ein und bringen viele der benötigten Pakete mit. Im Gegensatz zu Anaconda installiert Miniconda jedoch nur ein paar Basis-Pakete, während Anaconda noch weitere Pakete für wissenschafftliche Zwecke und grafische Tools wie den Anaconda Navigator mitbringt. Miniconda benötigt bei der Installation ungefähr 250 MB, während Anaconda mehrere GB benötigt.

Miniconda ist zwar von aus dem Repo von Anaconda.com herunterladbar, der Link hierzu jedoch etwas versteckt auf https://docs.conda.io/en/latest/miniconda.html zu finden. Dort habe ich den Miniconda Python 3.7 64-bit Installer geladen. Während der Installation habe ich alle vorgeschlagenen Parameter so gelassen und nichts verändert.

Im Startmenü ist nach der Installation der Anaconda Prompt zu finden. In diesem nehmen wir die Einrichtung der Umgebung für Pelican vor. Zuerst aktualisieren wir aber hiermit die Pakete der gerade installierten Basis.

(base) C:\Users\gaul>conda update -n base -c defaults conda
Solving environment: done

## Package Plan ##

  environment location: C:\Users\gaul\AppData\Local\Continuum\miniconda3

  added / updated specs:
    - conda


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    openssl-1.1.1b             |       he774522_1         5.7 MB
    ca-certificates-2019.1.23  |                0         158 KB
    conda-4.6.11               |           py37_0         1.7 MB
    certifi-2019.3.9           |           py37_0         155 KB
    ------------------------------------------------------------
                                           Total:         7.7 MB

The following packages will be UPDATED:

    ca-certificates: 2018.03.07-0      --> 2019.1.23-0
    certifi:         2018.11.29-py37_0 --> 2019.3.9-py37_0
    conda:           4.5.12-py37_0     --> 4.6.11-py37_0
    openssl:         1.1.1a-he774522_0 --> 1.1.1b-he774522_1

Proceed ([y]/n)? y


Downloading and Extracting Packages
openssl-1.1.1b       | 5.7 MB    | ############################################################################ | 100%
ca-certificates-2019 | 158 KB    | ############################################################################ | 100%
conda-4.6.11         | 1.7 MB    | ############################################################################ | 100%
certifi-2019.3.9     | 155 KB    | ############################################################################ | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

(base) C:\Users\gaul>

Einrichtung Umgebung für Pelican

Im Anschluss richten wir im Anaconda Prompt Umgebung für Pelican ein.

Für den Fall, das später doch andere Python Projekte erstellt werden sollen, nutzen wir zur sauberen Trennung für jedes unserer Projekte ein sog. environment. Für unsere Pelican Webseite nennen wir dies staticsite und wie folgt erstellt und aktiviert.:

(base) C:\Users\gaul>conda create -n staticsite
WARNING: The conda.compat module is deprecated and will be removed in a future release.
Collecting package metadata: done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\gaul\AppData\Local\Continuum\miniconda3\envs\staticsite



Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate staticsite
#
# To deactivate an active environment, use
#
#     $ conda deactivate


(base) C:\Users\gaul>conda activate staticsite

(staticsite) C:\Users\gaul>

Bei jedem Start des Anaconda Prompt muss die Umgebung mittels conda activate staticsite aktiviert werden.

Installation benötigter Python-Pakete

Im Anschluss sollten zuerst die benötigten Python-Pakete installiert werden. Alle Ausgaben werden hier mit ... abgekürzt.:

(staticsite) C:\Users\gaul>conda install pip git
....
(staticsite) C:\Users\gaul>pip install pelican markdown fabric3 bs4 ghp-import
....

Anlage der Webseite

Um die Webseite von mehreren Rechnern generieren zu können, möchte ich sie auf Google Drive ablegen. Dher werde ich dort ein Verzeichnis erstellen und initialisieren.:

(staticsite) C:\Users\gaul>mkdir C:\Users\gaul\Google Drive\GaulNet
(staticsite) C:\Users\gaul>cd C:\Users\gaul\Google Drive\GaulNet
(staticsite) C:\Users\gaul\Google Drive\GaulNet>pelican-quickstart
Welcome to pelican-quickstart v4.0.1.

This script will help you create a new Pelican-based website.

Please answer the following questions so this script can generate the files
needed by Pelican.


> Where do you want to create your new web site? [.]
> What will be the title of this web site? Gaulnet.de
> Who will be the author of this web site? Björn Gaul
> What will be the default language of this web site? [de]
> Do you want to specify a URL prefix? e.g., https://example.com   (Y/n) y
> What is your URL prefix? (see above example; no trailing slash) https://www.gaulnet.de
> Do you want to enable article pagination? (Y/n) y
> How many articles per page do you want? [10]
> What is your time zone? [Europe/Paris] Europe/Berlin
> Do you want to generate a tasks.py/Makefile to automate generation and publishing? (Y/n) n
Done. Your new project is available at C:\Users\gaul\Google Drive\GaulNet

Herunterladen und Einbinden eines Themes

Die meisten Pelican-Themes liegen bei GitHub und können dort vorab durchsucht und betrachtet werden. Nun ist es absolut unkompliziert alle Themes dort herunterzuladen bzw. zu klonen. Allerdings lädt dies dann auch wirklich alle Themes herunter. Dies möchte ich vermeiden und nur ein einzelnes, bestimmtes Theme herunterladen. Um dies mit Git zu machen ist minimaler Mehraufwand erfolderlich, um einen sog. sparseCheckout zu machen.

Da später das Theme vielleicht mal getauscht werden soll, ist es sinnvoll dies unter einem separaten Ordner "pelican-themes" abzulegen. Um hier ein Git-Repository mit dem einzelnen Theme pelican-bootstrap3 anzulegen sind folgende Schritte notwendig.

(staticsite) C:\Users\gaul\Google Drive\GaulNet>mkdir pelican-themes\.git\info

(staticsite) C:\Users\gaul\Google Drive\GaulNet>cd pelican-themes

(staticsite) C:\Users\gaul\Google Drive\GaulNet\pelican-themes>git init
Initialized empty Git repository in C:/Users/gaul/Google Drive/GaulNet/pelican-themes/.git/

(staticsite) C:\Users\gaul\Google Drive\GaulNet\pelican-themes>echo pelican-bootstrap3 >> .git\info\sparse-checkout

(staticsite) C:\Users\gaul\Google Drive\GaulNet\pelican-themes>git config core.sparseCheckout true

(staticsite) C:\Users\gaul\Google Drive\GaulNet\pelican-themes>git remote add origin -f https://github.com/getpelican/pelican-themes.git
Updating origin
remote: Enumerating objects: 6302, done.
remote: Total 6302 (delta 0), reused 0 (delta 0), pack-reused 6302
Receiving objects: 100% (6302/6302), 30.69 MiB | 7.96 MiB/s, done.
Resolving deltas: 100% (3156/3156), done.
From https://github.com/getpelican/pelican-themes
 * [new branch]      master     -> origin/master
 * [new branch]      previews   -> origin/previews

(staticsite) C:\Users\gaul\Google Drive\GaulNet\pelican-themes>git pull origin master
From https://github.com/getpelican/pelican-themes
 * branch            master     -> FETCH_HEAD

Auch ein Updates des Themes kann wieder durch "git pull origin master" erfolgen.

Um das Theme zu aktivieren muss nun die pelicanconf.py ergänzt bzw. geändert werden.:

JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
I18N_TEMPLATES_LANG = 'en'
THEME = 'pelican-themes/pelican-bootstrap3'

Herunterladen und Einbinden benötigter Plugins

Grundsätzlich sind auch die benötigten Modules so von GitHub herunterzuladen. Hier möchte ich jedoch aufzeigen, wie sich alle Plugin in einem Schwung herunterladen lassen. Denn, wie ich in vielen Anleitungen für Pelican gesehen habe, werden dort keinerlei Submodule herunterladen, was in leeren Verzeichnissen resultiert, über die auch ich mich erst gewundert habe.

Ich teile dies hier absichtlich in zwei git-Befehle auf. Denn so ist ersichtlich, wie sich die vergessenen Submodule auch nachträglich herunterladen lassen. Das Verzeichnis pelican-plugins wird hierbei durch den 1. Git-Befehl gleich mitangelegt.

Die gesamten Plugins machen ungefähr 105 MB aus.

(staticsite) C:\Users\gaul\Google Drive\GaulNet>git clone https://github.com/getpelican/pelican-plugins.git
cd pelican-plugins
(staticsite) C:\Users\gaul\Google Drive\GaulNet\pelican-plugins>git submodule update --init --recursive

Auch die Plugins werden in der pelicanconf.py eingetragen und konfiguriert.

PLUGIN_PATHS = ['pelican-plugins']
PLUGINS = [
            'gallery',
            'i18n_subsites',
            'series',
            'tag_cloud',
        ]

# For Tag-Cloud Plugin
TAG_CLOUD_STEPS = 4 # Tag-Cloud ; nicht als Liste
DISPLAY_TAGS_INLINE = True

Die Konfigurationsmöglichkeiten und Benutzbarkeit der einzelnen Plugins hängt von den Themes ab. Daher sollte die in den Plugin- und Theme-Verzeichnissen gespeicherte Dokumentation gelesen werden.

Generierung des Outputs

Da dies nur eine Anleitung ist, die Pelican unter Windows 10 betrieben werden kann, wird hier nur eine minimalistische Beispielseite angelegt. Hierzu lege ich die leere Datei unter content\test.md mit folgendem Inhalt an.

Title: Pelican Test
Date: 2019-04-08 17:00
Category: Test
Tags: Pelican, Test
Lang: de
Dies ist eine Testseite für [Pelican][]

[1]: https://docs.getpelican.com/en/stable/

Die Webseite (der Output) wird nun mit folgendem Befehl generiert. Die erzeugten Dateien werden in das Verzeichnis output gespeichert.

(staticsite) C:\Users\gaul\Google Drive\GaulNet>pelican content --output output --settings pelicanconf.py
Done: Processed 20 articles, 5 drafts, 2 pages, 1 hidden page and 0 draft pages in 4.31 seconds.

Nutzung des integrierten Webservers zum Anschauen des Outputs

Nun kann man zwar die Seiten betrachten, indem man die datei output\index.html anklickt, jedoch ist es auch möglich den integrierten Webserver zu nutzen um die Webseite über http://localhost:8000 zu betrachten.

Der integrierte Server wird wie folgt gestartet.

(staticsite) C:\Users\gaul\Google Drive\GaulNet>cd output && python -m http.server && cd ..
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Der Server wird durch zweimaliges Drücken con Strg+C im Anaconda Prompt wieder beendet.

Upload auf den Webspace

Der Upload des kompletten Inhalts des _output-Verzeichnisses* kann mit einem x-beliebigen Programm auf den eigenen Webspace geladen werden. Ich selber nutze einen Anbieter, der sowohl sftp, wie auch ftps anbietet. Daher nutze ich unter Windows gerne den FileZilla Client hierfür.