Rechnungstore schrieb:
Wenn docker-py Bestandteil des Pakets python3-docker ist, dann auf jeden Fall.
Wenn man sich die Copyright-Datei für das Paket python3-docker ansieht, sieht man, dass das in der Tat das Git-Repository für docker-py als Quelle hat: http://changelogs.ubuntu.com/changelogs/pool/universe/p/python-docker/python-docker_1.8.0-0ubuntu1/copyright
Ich versuche gerade mittels find
eine Datei namens docker.py
oder docker-py
zu finden. Leider bislang ohne Erfolg.
Python bietet einige Besonderheiten, was die Möglichkeiten zur Namensauflösung in Modulen angeht. Du gehst vom einfachsten Fall aus, dass alles in einer Datei steckt. Module können aber auch Verzeichnisstrukturen haben - die Klasse Client
aus dem Paket ist in /usr/lib/python3/dist-packages/docker/client.py definiert. Warum man sie über from docker import Client
nutzbar machen kann und nicht nur über from docker.client import Client
, ist dann die nächste Frage, die man sich stellen sollte - die Antwort darauf findet man in https://docs.python.org/3/tutorial/modules.html#packages - das Modul enthält eine /usr/lib/python3/dist-packages/docker/__init__.py mit der Zeile
| from .client import Client, AutoVersionClient, from_env # flake8: noqa
|
Dadurch wird Client
direkt über den docker
Namespace erreichbar.
Gibt es denn keine funktionierende Möglichkeit herauszufinden, in welcher Datei die Klasse Client definiert ist (sofern es denn eine Klasse ist)??
Importierte Module haben Attribute, die dabei helfen können - siehe https://docs.python.org/3/reference/import.html#import-related-module-attributes:
| >>> import docker
>>> docker.__file__
'/usr/lib/python3/dist-packages/docker/__init__.py'
|
Alternativ kann man auch das Modul importlib bemühen:
| >>> import importlib
>>> importlib.find_loader('docker').get_filename()
'/usr/lib/python3/dist-packages/docker/__init__.py'
|
Dann schaut man sich /usr/lib/python3/dist-packages/docker/__init__.py an, und kann sehen, dass Client
aus .client
stammt, also muss man in die Datei /usr/lib/python3/dist-packages/docker/client.py schauen.