Umgang mit Abhängigkeiten

Python-Pakete entwickeln

James Fulton

Climate informatics researcher

Was sind Abhängigkeiten?

  • Andere Pakete, die du in deinem Paket importierst
  • In mymodule.py:
# Diese importierten Pakete sind Abhängigkeiten
import numpy as np
import pandas as pd
...
Python-Pakete entwickeln

Abhängigkeiten zu setup.py hinzufügen

from setuptools import setup, find_packages

setup(
    ...
    install_requires=['pandas', 'scipy', 'matplotlib'],
)
Python-Pakete entwickeln

Abhängigkeitsversionen steuern

from setuptools import setup, find_packages

setup(
    ...
    install_requires=[

'pandas>=1.0',
'scipy==1.1',
'matplotlib>=2.2.1,<3'
], )
Python-Pakete entwickeln

Abhängigkeitsversionen steuern

from setuptools import setup, find_packages

setup(
    ...
    install_requires=[

'pandas>=1.0', # gut 'scipy==1.1', # schlecht 'matplotlib>=2.2.1,<3' # gut ], )
  • Erlaube so viele Paketversionen wie möglich
  • Entferne ungenutzte Abhängigkeiten
Python-Pakete entwickeln

Python-Versionen

from setuptools import setup, find_packages

setup(
    ...
    python_requires='>=2.7, !=3.0.*, !=3.1.*',
)
Python-Pakete entwickeln

Abhängigkeits- und Paketversionen wählen

  • Prüfe Paket-Historie oder Release Notes
  • Teste verschiedene Versionen

Ein Auszug aus den NumPy-Release-Notes.

Python-Pakete entwickeln

Eine Umgebung für Entwickler:innen erstellen

pip freeze
alabaster==0.7.12
appdirs==1.4.4
argh==0.26.2
...
wrapt==1.11.2
yapf==0.29.0
zipp==3.1.0
Python-Pakete entwickeln

Eine Umgebung für Entwickler:innen erstellen

Paketanforderungen in eine Datei speichern

pip freeze > requirements.txt

Anforderungen aus Datei installieren

pip install -r requirements.txt
mysklearn/
|-- mysklearn
|   |-- __init__.py
|   |-- preprocessing
|   |   |-- __init__.py
|   |   |-- normalize.py
|   |   |-- standardize.py
|   |-- regression
|   |   |-- __init__.py
|   |   |-- regression.py
|   |-- utils.py
|-- setup.py
|-- requirements.txt   <-- Entwickler:innen-Umgebung
Python-Pakete entwickeln

Lass uns üben!

Python-Pakete entwickeln

Preparing Video For Download...