Wie sollen private Abhängigkeitslinks in setup.py behandelt werden?

10

Bei der Arbeit verwenden wir einen privaten Pypi-Server. Dieser Pypi-Server wird als Abhängigkeitslink angegeben:

...
from setuptools import setup

config = ConfigParser.ConfigParser()
rc = os.path.join(os.path.expanduser('~'), '.pypirc')
config.read(rc)
dependency_links = [
    'https://{}:{}@<private_url>'.format(
        config.get('dc', 'username'), config.get('dc', 'password'))]

setup(
    dependency_links=dependency_links,
    ...)

Dies funktioniert in den meisten Fällen einwandfrei. Vor einiger Zeit mussten wir jedoch Pakete auf einem Client-Server installieren. Dazu mussten wir ein gültiges kopieren, .pypircbevor wir Pakete installieren konnten.

Auch der obige Code fühlt sich einfach wie ein schmutziger Hack an.

Was ist der richtige Weg, um gesicherte Abhängigkeitslinks ohne Hardcodierungsanmeldeinformationen anzugeben?

Remco Haszing
quelle
1
Ich verstehe was du meinst. Es ist nicht so schmutzig von einem Hack, aber es bedeutet, dass Sie die Authentifizierung mit dem Abhängigkeitsmanagement auf Paketbasis koppeln. Dieser Ansatz ist nicht portabel oder skalierbar.
Joel Cornett

Antworten:

1

Dies scheint ein vernünftiger und überhaupt kein schmutziger Hack zu sein.

  1. Es gibt eine Konfigurationsdatei für Anmeldeinformationen
  2. Es gibt eine Möglichkeit, die benutzerdefinierte URL + creds in die Abhängigkeiten einzufügen

Die Arbeit wird erledigt und gut gemacht. Die einzige Möglichkeit, dies zu verbessern, besteht darin, sie zu dokumentieren und auf mehreren verschiedenen Setups oder mit mehreren Pypi-Servern auszuprobieren und die daraus resultierenden Probleme zu beheben.

Rudolf Olah
quelle
0

Eine Möglichkeit wäre das Festlegen von Umgebungsvariablen . Dies könnte mit Bereitstellungstools wie Ansible erfolgen . Speichern Sie Ihre Geheimnisse mit Stack Overflow's Blackbox oder Ansible's Vault

Alternativ: Containerisierung würde helfen, da alles, was zum Ausführen der Software benötigt wird, eingebaut ist.

Thomas Junk
quelle
0

Seien Sie sehr vorsichtig, wenn Sie diese Lösung verwenden. Wie in der Dokumentation angegeben :

Sie werden auch in die Metadaten des Eies geschrieben, damit sie von Tools wie EasyInstall zur Installation einer .egg-Datei verwendet werden können.

Dh Ihre Anmeldeinformationen werden in der verteilt .egg. Beim Rooten im setuptoolsQuellcode stellte ich fest, dass intern der easy_installBefehl zum Installieren von Abhängigkeiten verwendet wird. Wenn Sie also Folgendes zu Ihren hinzufügen setup.cfg, wird ein privates Repo abgerufen:

[easy_install]
index_url=https://username:password@your.repo/simple

Dies hat immer noch die Snafu, dass Ihre Anmeldeinformationen bei der Installation auf dem Terminal gedruckt werden, aber zumindest landen sie nicht in Ihrer Distribution. Beachten Sie, dass diese Lösung ersetzt Ihre Index URL, so dass Ihre privaten Repo hat auch die Öffentlichkeit ein spiegeln. Ich habe keine Unterstützung für das Hinzufügen von Index-URLs auf offensichtliche Weise gesehen.

scranen
quelle