Zum Inhalt

Installation

dsstools (und damit auch networkx und matplotlib) sollten mit einem Mittel der Wahl in die jeweilige Umgebung installiert werden. Wir nutzen bei uns poetry, dessen Installation hier erklärt wird.

dsstools

Erstelle einen Ordner, gerne auch inklusive Git. Führe im Terminal darin folgendes aus:

poetry init --no-interaction

Danach sollte sich eine pyproject.toml im Verzeichnis befinden. Öffne diese .toml mit einem Editor deiner Wahl und füge Folgendes ein:

[[tool.poetry.source]]
name = "dss"
url = "https://gitlab.rrz.uni-hamburg.de/api/v4/projects/2655/packages/pypi/simple"
priority = "supplemental"

Damit wird Poetry das zweite Repository, in dem wir dsstools momentan veröffentlichen, definiert. Sollte es Packages auf PyPi nicht finden können, so sucht es sich das Zweite.

Um dsstools schlussendlich zu installieren, führe Folgendes aus:

poetry add dsstools
Falls du Graphviz zur Positionierung nutzen möchtest:

Achtung

Bevor du den folgenden Befehl ausführst, bitte unbedingt den Abschnitt weiter unten lesen.

poetry add dsstools[graphviz]
Damit wird die optionale Einbindung von Graphviz installiert.

Um das Paket zu aktualisieren, bspw. wenn ein neues Update erschienen ist:

poetry update dsstools

Hinweis

Wer möchte und sich auskennt, kann auch alternativ ein virtuelles Environment venv oder einfach pip nutzen.

Verwendung

Wenn man jetzt ein Skript schreibt, beispielsweise mit dem Namen main.py, so lässt sich das wie folgt im Terminal ausführen:

poetry run python main.py
Dadurch werden die vorab installierten Abhängigkeiten automatisch für das Skript bereitgestellt.

Hinweis

Wer eine IDE wie PyCharm oder Spyder nutzt, findet für die Einrichtung in der IDE hier folgende Links: - PyCharm - Spyder unterstützt das Feature bisher noch nicht. Es ist aber für die Veröffentlichung von Spyder 6.0 geplant. Issue hier

graphviz

Die Installation von graphviz gestaltet sich etwas schwieriger und ist abhängig von deinem Betriebssystem. Graphviz ist dabei ein Programm zur Visualisierung von Graphen aller Art, während pygraphviz ein Python-Package ist, welches dem Zugriff auf Graphviz aus Python heraus ermöglicht. pygraphviz kann dementsprechend aus Poetry/venv heraus installiert werden, Graphviz muss auf Betriebssystemebene installiert werden.

Die Installationsanleitung für pygraphviz (das ist das zugehörige Python-Package) ist sehr hilfreich: https://pygraphviz.github.io/documentation/stable/install.html

Einige Vorschläge, wie graphviz installiert werden kann:

Windows

  • Chocolatey:
    PS C:\> choco install graphviz
    PS C:\> python -m pip install --config-settings="--global-option=build_ext" `
                  --config-settings="--global-option="-IC:\Program Files\Graphviz\include" `
                  --config-settings="--global-option="-LC:\Program Files\Graphviz\lib" `
                  pygraphviz
    
    pygraphviz muss danach mit der Referenz zu Graphviz installiert werden.

Achtung

In diesem Fall darf pygraphviz nicht über Poetry installiert werden!

macOS

Siehe auch hier die Installationsanweisungen von pygraphviz.

  • Homebrew:
    brew install graphviz
    

Hinweis

In diesem Fall kann Poetry für die Installation von pygraphviz verwendet werden:

poetry add dsstools[graphviz]

  • MacPorts
    port install graphviz
    

Warnung

In diesem Fall kann Poetry nicht für die Installation von pygraphviz verwendet werden. Deshalb muss pygraphviz manuell installiert werden:

pip install --config-settings="--global-option=build_ext" \
          --config-settings="--global-option=-I/opt/local/include/" \
          --config-settings="--global-option=-L/opt/local/lib/" \

Linux

Du kommst klar. Nutze den Package-Manager deines Vertrauens für die Installation.

Hinweis

Graphviz besteht häufig aus zwei Pakete, bspw. für Ubuntu aus graphviz und graphviz-dev. Bitte prüfe das für deine Package Management vorab.

Danach kann die Standardinstallation über Poetry genutzt werden.

Nix (nur für Expert*innen)

Dem Repo liegt eine Nix Flake bei, die eine Entwicklungsumgebung bereitstellt und automatisch Graphviz installiert:

{
  description = "Dsstools flake for environment handling";

  inputs = {
    systems.url = "github:nix-systems/default";
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    devenv.url = "github:cachix/devenv";
  };

  outputs = { self, nixpkgs, devenv, systems }@inputs:
    let
      forEachSystem = nixpkgs.lib.genAttrs (import systems);
    in
      {
        packages = forEachSystem (system: {
          devenv-up = self.devShells.${system}.default.config.procfileScript;
        });
        devShells = forEachSystem (system:
          let
            pkgs = nixpkgs.legacyPackages.${system};
          in
            {
              default = devenv.lib.mkShell {
                inherit inputs pkgs;
                modules = [
                  {
                    packages = [
                      pkgs.graphviz
                      pkgs.python312Packages.pygraphviz
                      pkgs.gcc
                    ];
                    languages.python = {
                      enable = true;
                      package = pkgs.python312;
                      poetry = {
                        activate.enable = true;
                        enable = true;
                        install.enable = true;
                        install.allExtras = true;
                        install.groups = [ "dev" ];
                      };
                    };
                  }
                ];
              };
              python311 = devenv.lib.mkShell {
                inherit inputs pkgs;
                modules = [
                  {
                    packages = [
                      pkgs.graphviz
                      pkgs.gcc
                    ];
                    languages.python = {
                      enable = true;
                      package = pkgs.python311;
                      poetry = {
                        activate.enable = true;
                        enable = true;
                        install.enable = true;
                        install.allExtras = true;
                        install.groups = [ "dev" ];
                      };
                    };
                  }
                ];
              };
              python310 = devenv.lib.mkShell {
                inherit inputs pkgs;
                modules = [
                  {
                    packages = [
                      pkgs.graphviz
                      pkgs.gcc
                    ];
                    languages.python = {
                      enable = true;
                      package = pkgs.python310;
                      poetry = {
                        activate.enable = true;
                        enable = true;
                        install.enable = true;
                        install.allExtras = true;
                        install.groups = [ "dev" ];
                      };
                    };
                  }
                ];
              };
              python39 = devenv.lib.mkShell {
                inherit inputs pkgs;
                modules = [
                  {
                    packages = [
                      pkgs.graphviz
                      # pkgs.python39Packages.pygraphviz
                      pkgs.gcc
                    ];
                    languages.python = {
                      enable = true;
                      package = pkgs.python39;
                      poetry = {
                        activate.enable = true;
                        enable = true;
                        install.enable = true;
                        install.allExtras = true;
                        install.groups = [ "dev" ];
                      };
                    };
                  }
                ];
              };
            });
      };
}
Diese Datei kann ebenfalls im eigenen Repo erstellt werden.