*.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: 1724
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: 18389
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: 1724
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: 18389
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: 1724
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: 18389
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: 1724
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?
Benutzeravatar
Dennis89
User
Beiträge: 1724
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen und danke.

Ich habe das mal nachgebaut.
Der Option `--extra-index-url` gebe ich diesen Link mit:
https://raw.githubusercontent.com/Denni ... index.html
Dieser führt zu:
https://raw.githubusercontent.com/Denni ... 0-1-0.html

Darin wird dann auf den Download verlinkt, wie bei `pypi.org/simple` auch. Meine Vermutung ist, dass das nicht geht, weil meine `index.html` nicht auf irgendeinem Server "läuft" sondern mein Link zum Quelltext führt.
Dann habe ich die `index.html` local abgelegt und angegeben (habe das auch mit absoluter Pfadangabe versucht, gleiches Ergebnis):

Code: Alles auswählen

(venv) [dennis@dennis Bla]$ pip install gasproperties --extra-index-url index.html
WARNING: The index url "index.html" seems invalid, please provide a scheme.
Looking in indexes: https://pypi.org/simple, index.html
WARNING: Location 'index.html/gasproperties/' is ignored: it is either a non-existing path or lacks a specific scheme.
ERROR: Could not find a version that satisfies the requirement gasproperties (from versions: none)
ERROR: No matching distribution found for gasproperties
Diese Warnung:

Code: Alles auswählen

WARNING: Location 'index.html/gasproperties/' is ignored:
Sagt mir einen Pfad, den es nicht gibt. Ja, die Datei gibt es, aber `/gasproperties` führt nicht zum Ziel. Und das könnte natürlich auch das Problem sein, wenn ich die Roh-Index.html als `--extra-index-url` angebe und würde für mich wieder bedeuten, das ich einen eigenen Server benötige.

Was meint ihr dazu?

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

Die erste Warnung sagt, dass Du kein Schema angegeben hast, bei lokalen Dateien scheint wohl ein file: gebraucht zu werden. Wie die Ausgabe bei Deinem Versuch mit github ausgesehen hat, hast Du nicht gezeigt.
In der Datei index.html gibt es kein Paket gasproperties, nur eines mit dem Namen gasproperties-0.1.0, also versucht pip das Paket zu finden, indem es den Namen an die URL hängt.
Benutzeravatar
Dennis89
User
Beiträge: 1724
Registriert: Freitag 11. Dezember 2020, 15:13

Stimmt, das wollte ich noch zeigen:

Code: Alles auswählen

(venv) [dennis@dennis Bla]$ pip install gasproperties --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 (from versions: none)
ERROR: No matching distribution found for gasproperties
(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
Was mich auch irritiert ist `from versions: none`, weil das kommt auch, wenn ich eine Version mit angebe:

Code: Alles auswählen

(venv) [dennis@dennis Bla]$ pip install gasproperties-0.1.0==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==0.1.0 (from versions: none)
ERROR: No matching distribution found for gasproperties-0.1.0==0.1.0
Auch Anführungszeichen ändern nichts.

Code: Alles auswählen

(venv) [dennis@dennis Bla]$ pip install "gasproperties-0.1.0==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==0.1.0 (from versions: none)
ERROR: No matching distribution found for gasproperties-0.1.0==0.1.0
(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


Mit `file:`:

Code: Alles auswählen

(venv) [dennis@dennis Bla]$ pip install "gasproperties-0.1.0" --extra-index-url file:/home/dennis/Bla/index.html
Looking in indexes: https://pypi.org/simple, file:///home/dennis/Bla/index.html
WARNING: Location 'file:/home/dennis/Bla/index.html/gasproperties-0-1-0/' is ignored: it is neither a file nor a directory.
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
Was auffällt, ich gebe an er soll `gasproperties-0.1.0` installieren und er hängt an die URL `gasproperties-0-1-0` an. `0-1-0` ist als Versionsangabe allerdings nicht zulässig.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten