*.whl Datei über `requirements.txt` oder `pyproject.toml` von Github laden und installieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Dennis89
User
Beiträge: 1722
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo zusammen,

ich habe nun recht große Freude daran, ein Projekt, das fertig/benutzbar ist, als *.whl zu speichern und zu installieren.
Wenn ich die *.whl-Datei lokal habe, dann funktioniert das wunderbar. Wenn ich das nun teilen will, dann muss die Person das von Hand aus meinem Repo herunterladen oder ich muss es bei `PyPi` hochladen. Option zwei würde ich machen, wenn es ein ernsthaftes Projekt wäre. Irgendwelchen "Quatsch" will ich da eigentlich nicht hoch laden.

Im Netz habe ich nur die Möglichkeit gefunden, dass ich in den Dateien das Repo angeben kann und `pip` installiert dass dann, wenn da eine `setup.py` Datei vorhanden ist.
Wenn ich sowas in die `requirements.txt` schreibe

Code: Alles auswählen

test @ https://github.com/Dennis-89/.../dist/*.whl
Dann wird die *.whl Datei heruntergeladen, allerdings meldet `pip` mir, dass die Datei invalid wäre. Ich vermute, dass der die entpackt. Denn wenn ich statt der *.whl eine *.tar.gz Datei zum herunterladen angebe, meldet er mir, dass das keine `gzip`-Datei sei.

Kurz gesagt, ich suche eine Möglichkeit, wie den schön verpackten Code verteilen kann und wenn ich Änderungen vornehme, das auf dem Zielsystem mit `pip install * -U` oder ähnlichem sehr einfach eingespielt/geupdatet wird.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 18388
Registriert: Sonntag 21. Oktober 2012, 17:20

*.whl ist doch keine gültige URL. Laut Dokumentationsbeispiel gibt man wheels ohne Package-Namen an: https://pip.pypa.io/en/stable/reference ... le-format/ letzte Zeile. Weil der Packagename ja schon im Dateinamen kodiert ist.
Wenn Du eine Datei tar.gz nennst, die aber gar keine gzip-Datei ist, ist ja logisch, dass das nicht funktioniert.
Benutzeravatar
Dennis89
User
Beiträge: 1722
Registriert: Freitag 11. Dezember 2020, 15:13

Danke für die Antwort.

Ich habe nun verschiedenstes aus der Doku versucht und es endet immer im gleichen Fehler. Wenn ich die Datei aber manuell runterlade und dann mit pip und Pfadangabe installiere, dann funktioniert es.
Mal ohne `requirements.txt` habe ich dieses Beispiel aus der Doku versucht (Hier ist der Packagename wieder mit angegeben, ohne kommt allerdings das Gleiche Ergebnis. Ich habe mich einfach durch die Beispiele durchprobiert):

Code: Alles auswählen

(venv) [dennis@dennis Bla]$ pip install 'gasproperties@https://github.com/Dennis-89/CoolProp/blob/main/CustomGas/dist/gasproperties-0.1.0-py3-none-any.whl'
Collecting gasproperties @ https://github.com/Dennis-89/CoolProp/blob/main/CustomGas/dist/gasproperties-0.1.0-py3-none-any.whl
  Downloading https://github.com/Dennis-89/CoolProp/blob/main/CustomGas/dist/gasproperties-0.1.0-py3-none-any.whl
     | 223.8 kB 1.4 MB/s 0:00:00
ERROR: Wheel 'gasproperties' located at /tmp/pip-unpack-6i76jppz/gasproperties-0.1.0-py3-none-any.whl is invalid.
Ich würde ja an der *.whl Datei zweifeln, aber dann könnte ich sie nicht manuell installieren. Das angegebene tmp-Verzeichnis, wird vermutlich nach der Fehlerausgabe gelöscht:

Code: Alles auswählen

(venv) [dennis@dennis Bla]$ ls /tmp/ | grep pip*
(venv) [dennis@dennis Bla]$ 
Grüße
Dennis

Edit: Auch wenn ich auf Github den "perma Link" verwende, ist das Ergebnis das gleiche. Das wäre dieser hier:
https://github.com/Dennis-89/CoolProp/b ... ne-any.whl
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 18388
Registriert: Sonntag 21. Oktober 2012, 17:20

Dein Link zeigt auf eine HTML-Seite. Du willst den raw-Link verwenden: https://github.com/Dennis-89/CoolProp/r ... ne-any.whl

Was Du aber eigentlich machen willst, ist ein Release erstellen: https://github.com/Dennis-89/CoolProp/releases/new
Weil fertige Pakete gehören eigentlich nicht ins git.
Benutzeravatar
Dennis89
User
Beiträge: 1722
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen,

vielen Dank!
Ein Release habe ich nun erstellt und mit folgendem Link klappt die Installation auch:
https://github.com/Dennis-89/CoolProp/r ... ne-any.whl

Ich habe jetzt den Tag `first` vergeben, `latest` hätte wohl mehr Sinn gemacht. Wenn ich mir vorstelle, ich entwickle dieses Projekt weiter, dann wird sich zum einen der Name der *.whl-Datei ändern, wegen der Version und zum anderen der Tag. Bzw. den Tag kann ich vielleicht nachträglich manuell anpassen, so dass die aktuellste Version immer `latest` hat. Auf was ich raus will, mit meinem jetzt verwendeten Link, kann ich nicht einfach mit `pip` das Projekt auf das neuste Release updaten, da sich zumindest der Name der *.whl-Datei ändert.

Ich habe bis jetzt nur gefunden, dass man mit ` pip install git+<URL>` ein Tag angeben kann. Das `git` löst aber ein `clone` aus, was in meinem Fall nicht funktioniert/nicht gewollt ist. Wie würde man dass denn machen?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 18388
Registriert: Sonntag 21. Oktober 2012, 17:20

Dafür ist ein Paketindex da, zu Deiner Konfiguration die richtigen Versionen zu finden. Mit der direkten Angabe einer Datei ist das nicht möglich.
Dir bleibt nur übrig eine eigene Index-Datei bereitzustellen, das dann über --extra-index-url bei der Installation agegeben werden muß.
Benutzeravatar
Dennis89
User
Beiträge: 1722
Registriert: Freitag 11. Dezember 2020, 15:13

Danke dafür.

Meinst du eine `index.html` Datei?
Ich habe zumindest auf der Suche danach etwas in die Richtung gefunden in Zusammenhang mit PEP503.
Eine Datei habe ich eingefügt:
https://github.com/Dennis-89/CoolProp/b ... index.html

Code: Alles auswählen

(venv) [dennis@dennis Bla]$ pip install gasproperties==0.1.0 --extra-index-url https://raw.githubusercontent.com/Dennis-89/CoolProp/refs/heads/main/CustomGas/index.html
Looking in indexes: https://pypi.org/simple, https://raw.githubusercontent.com/Dennis-89/CoolProp/refs/heads/main/CustomGas/index.html
ERROR: Could not find a version that satisfies the requirement gasproperties==0.1.0 (from versions: none)
ERROR: No matching distribution found for gasproperties==0.1.0
Dieses mal zeigt meine URL gleich auf die Datei, so dass ich nicht auf der Github Seite lande, sondern der Inhalt verfügbar ist. Scheinbar übersehe ich was oder ich bin falsch abgebogen.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14368
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Dennis89: Das ist bestimmt irgendwo dokumentiert, aber Du kannst Dir ja auch einfach mal anschauen wie die andere URL https://pypi.org/simple aufgebaut ist. Da gibt es für jedes Package einen Link auf eine weitere Datei in der dann alle Package-Versionen verlinkt sind.
Who is General Failure and why is he reading my hard disk?
Antworten