Vor kurzem habe ich in dem aktuellen Projekt, an dem ich arbeite, an einer ganz bestimmten Aufgabe gearbeitet
arbeitet für Red Hat, das RHEL Lightspeed
ShellAI, dieses Projekt ist
relativ neu, aber wir wollten mit der Auslieferung von Entwicklungs-RPMs für unser QE beginnen
Freunde dazu auffordern, mit dem Tool herumzuspielen und es in ihrer Pipeline zu testen.
Ich kenne mich mit Verpackungen und allgemeinen Python-Sachen aus, aber Mann, ich muss es tun
Ich sage Ihnen, es hat mich zwei ganze Tage gekostet, diese Verpackungsaufgabe zu bewältigen. Lass mich
Führen Sie Sie sehr schnell durch die Details der Aufgabe.
TLDR; Am Ende hat alles geklappt und das ist die resultierende PR:
https://github.com/rhel-lightspeed/shellai/pull/4
Details zur Aufgabe
Das Projekt ShellAI soll unter RHEL 9 und den kommenden Versionen ausgeliefert werden
RHEL 10. Als Bonusziel möchten wir es auch auf RHEL 8 zum Laufen bringen.
Wenn Sie bereits zuvor mit RHEL gearbeitet haben, ist dies gemäß der obigen Aussage bereits der Fall
vermutet, dass die Herausforderung die Version der Abhängigkeiten sein wird, die lebt
in RHEL.
- RHEL 8 verfügt über Python 3.6
- RHEL 9 verfügt über Python 3.9
- und schließlich verfügt RHEL 10 über Python 3.12
Wir möchten auch relativ häufig Entwicklungs-Builds erhalten, um
Neue Funktionen testen, während wir das Tool entwickeln.
Für den Entwicklungsteil möchten wir
verwenden
pdm zur Verwaltung unserer Abhängigkeiten und
baut. Als wir die Aufgaben durchgingen, stellten wir fest, dass das PDM-Backend nicht funktioniert
Wird in den RHEL-Repositorys ausgeliefert, daher haben wir uns für den Standard-Setuptools-Build entschieden
Backend.
Da unsere Systemziele „relativ neu“ sind, möchten wir das
modernisieren
Projekt und stellen Sie sicher, dass wir neue Tools/Strukturen und Formate verwenden. Für
Dafür haben wir uns für ein pyproject.toml entschieden, da es über pdm init
generiert wird
als wir das Projekt gestartet haben.
Probleme beim Erstellen des RPM
Ursprünglich bestand unsere Idee darin, die neuesten Python-Funktionen und -Projekte zu verwenden
Struktur, wie z. B. die Datei pyproject.toml anstelle der alten Datei setup.py.
Wenn man ein neues Projekt startet, ist alles cool und neu, man ist sehr aufgeregt
Um dieses Zeug zu verwenden, ist das einzige Problem:
- Sie eignen sich sehr gut für den Entwicklungsprozess, aber nicht für die Verpackung.
Als ich mit der Aufgabe begann, dachte ich zunächst, dass wir das neue RPM verwenden könnten
Makros zum Erstellen des Projekts, da wir pyproject.toml und pdm für
verwenden
Abhängigkeiten verwalten.
Dazu gibt es in der Fedora-Dokumentation einen schönen Artikel mit dem Titel „Python Packaging“
Richtlinien
worauf sie im Detail eingehen. Dabei deckt der Leitfaden fast jedes Thema und jeden Fall ab
Sie benötigen möglicherweise sogar ein Beispiel
specfile.
Da unser Hauptziel RHEL ist, könnten wir uns vorstellen, dass wir alles verfolgen
aus dem Leitfaden würde so funktionieren, wie es ist, oder? Nein. Der Grund dafür liegt in der
Versionen, die in den RHEL-Repositorys ausgeliefert werden. Obwohl die neuen Makros
Wenn die in der Anleitung erwähnte Funktion möglicherweise während des Buildvorgangs funktioniert, können Sie sie nicht generieren
die Enddrehzahl in den folgenden Zielen:
- RHEL 8 wird Ihnen während %generate_buildrequires, as einen Fehler melden Die in dieser Version ausgelieferte Version von python3-setuptools ist super alt und das auch noch Erkenne das neue pyproject.toml-Format nicht wirklich.
- RHEL 9 kann die meisten Schritte durchlaufen, schlägt jedoch fehl %pyproject_wheel, da es ein Paket mit dem Namen UNKNOWN erstellt. Das Dies geschieht, weil (wieder) die unter RHEL 9 ausgelieferten Python3-Setuptools vorhanden sind alt. Die meisten Metadaten, die von generiert werden, werden nicht erkannt pyproject.toml specf.
Die Lösung
Wir mussten ein Vermächtnis schaffen
setup.py
Datei, um mit den Python-Wheel-Builds fortzufahren und Daten zu vermeiden
Duplizierung zwischen der pyproject.toml und unserer alten setup.py-Datei, wir
Ich habe tomllib verwendet, weil
folgende Gründe:
- Die Tomllib ist (über Pypi- und RPM-Paketierung) in RHEL 8 verfügbar
- Nach Python 3.11 wurde tomllib nativ in die Standardbibliothek gebündelt
Wie Sie oben gesehen haben, haben wir tomllib verwendet, um die Datei pyproject.toml zu laden und
Lesen Sie die erforderlichen Felder und aktualisieren Sie einfach unsere alte setup.py. Auf diese Weise
sind in der Lage, pyproject.toml zu ändern, und wann immer wir einen neuen Build pushen, werden wir das tun
in der Lage sein, die Konsistenz auch in unserem alten setup.py aufrechtzuerhalten.
Was die Spezifikationsdatei betrifft, mussten wir zurückgehen und das verwenden, was in der Dokumentation heißt
Python-Verpackung „201x-Ära“
Richtlinien.
Im Wesentlichen verwenden wir den guten alten Python-Befehl setup.py build ...
(natürlich durch Makros), um das Projekt zu erstellen.
Diese Lösung ermöglichte es uns, die Konsistenz aller gewünschten RHEL-Versionen aufrechtzuerhalten
um pdm und die glänzenden neuen Funktionen zu unterstützen und gleichzeitig weiter zu nutzen
Wir wünschen uns für die Entwicklung.
Das obige ist der detaillierte Inhalt vonVerpacken von Python-RPMs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Durch die folgenden Schritte können mehrdimensionale Arrays mit Numpy erstellt werden: 1) Verwenden Sie die Funktion numpy.array (), um ein Array wie NP.Array ([1,2,3], [4,5,6]) zu erstellen, um ein 2D-Array zu erstellen; 2) Verwenden Sie np.zeros (), np.ones (), np.random.random () und andere Funktionen, um ein Array zu erstellen, das mit spezifischen Werten gefüllt ist; 3) Verstehen Sie die Form- und Größeneigenschaften des Arrays, um sicherzustellen, dass die Länge des Unterarrays konsistent ist und Fehler vermeiden. 4) Verwenden Sie die Funktion np.reshape (), um die Form des Arrays zu ändern. 5) Achten Sie auf die Speichernutzung, um sicherzustellen, dass der Code klar und effizient ist.

SendeminnumpyissamethodtoperformoperationsonarraysofdifferentShapesByAutomaticaligningTHem.itsimplifiesCode, Verbesserung der Verschiebbarkeit, und BoostSPerformance.her'Showitworks: 1) kleinereArraysArepaddedwithonestOMatchDimens.2) compatibledimens

Forpythondatastorage, ChooselistsforflexibilitätswithmixedDatatypes, Array.Arrayformemory-effizientesHomogenoususnumericalData und NumpyArraysForAdvancedNumericalComputing.ListsareversAntileffictionForLarGenicalDataSetsetaSets;

In Artikel wird die Unmöglichkeit des Tupelverständnisses in Python aufgrund von Syntax -Mehrdeutigkeiten erörtert. Alternativen wie die Verwendung von Tuple () mit Generatorausdrücken werden vorgeschlagen, um Tupel effizient zu erstellen (159 Zeichen)

Der Artikel erläutert Module und Pakete in Python, deren Unterschiede und Verwendung. Module sind einzelne Dateien, während Pakete Verzeichnisse mit einer __init__.py -Datei sind, die verwandte Module hierarchisch organisieren.

In Artikel werden Docstrings in Python, deren Nutzung und Vorteile erörtert. Hauptproblem: Bedeutung von DocStrings für die Code -Dokumentation und -zugriffsfunktion.

In Artikel werden Lambda -Funktionen, ihre Unterschiede zu regulären Funktionen und deren Nützlichkeit bei Programmierszenarien erläutert. Nicht alle Sprachen unterstützen sie.

In Artikel wird in Python Break, Fortsetzung und Pass erörtert, wobei ihre Rolle bei der Kontrolle der Ausführung und des Programmablaufs der Schleife erläutert wird.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.
