Ich habe versucht, das Python Package Repository (Warehouse) auszuführen, das PyPI unterstützt

Überblick

--PyPI wird seit etwa 2018 auf die Repository-Implementierung der nächsten Generation (Warehouse) migriert. Dieser Quellcode ist auf GitHub verfügbar ( https: // github.com / pypa / warehouse).

Bewertungsnotiz

Prozedur-Memo bei Ausführung mit CentOS 7.7.

Annahme

Installieren Sie Docker / Docker-Compose. Wenn Sie sich Anforderungen / main.in im GitHub-Repository ansehen, ist dies angemessen (einschließlich "elasticsearch" und "postgresql"). Es ist ein komplizierter Stapel, der jedoch im Container gelöst wird.

Installation

Der Installationsvorgang lautet [Warehouse --Docs »Entwicklung» Erste Schritte] (https://warehouse.readthedocs.io/development/getting-started/) erklärt.

Führen Sie nach dem Klonen des Quellcodes von github den Befehl make build aus, um eine Docker-Image-Gruppe zu generieren.

$ git clone https://github.com/pypa/warehouse.git
$ cd warehouse
$ make build
$ docker images
REPOSITORY          TAG                  IMAGE ID            CREATED             SIZE
warehouse_web       latest               a78a164cbb8f        2 minutes ago       376MB
warehouse_worker    latest               a78a164cbb8f        2 minutes ago       376MB
<none>              <none>               5768f70bcf35        2 minutes ago       676MB
<none>              <none>               c34b08b4ed16        5 minutes ago       1.16GB
warehouse_static    latest               15277f26921d        6 minutes ago       1.14GB
python              3.7.3-slim-stretch   338ae06dfca5        6 months ago        143MB
node                8.15.1               8c51cec97ebf        9 months ago        895MB

Starten Sie die Containergruppe aus dem generierten Image mit dem folgenden Befehl.

$ make serve

Nachdem der statische Container vollständig gestartet wurde, führen Sie den folgenden Befehl aus (z. B. in einem anderen Terminal). (Wenn nicht ausgeführt, tritt beim Zugriff auf die Web-GUI ein Fehler auf, da die Datenbank nicht vorhanden ist.)

$ make initdb

Wenn Sie mit einem Browser auf Port 80 zugreifen, wird ein Bildschirm angezeigt, der fast dem von "pypi" entspricht. Die Hauptunterschiede sind wie folgt.

Unten finden Sie ein Beispiel für die Ausführung der REST-API (Endpunkt zum Abrufen von Paketinformationen) mit "curl".

$ yum install jq
$ curl -s http://127.0.0.1/pypi/logmmse/1.2/json | jq .info.name
"logmmse"

$ curl -s http://127.0.0.1/pypi/logmmse/json | jq '.releases|keys'
[
  "1.1",
  "1.2"
]

Paket hochladen

Die Registrierung ist möglich, indem Sie einfach das Upload-Ziel von einem Client wie "Twine" wechseln. Das Folgende ist ein Beispiel für das Hochladen des von cookiecuter generierten Beispielpakets.

Installieren Sie die vorausgesetzte Bibliothek.

$ yum install python36 -y
$ pip3 install twine wheel
$ pip3 install cookiecutter

Generieren Sie ein Beispielpaket mit der Vorlage (audreyr / cookiecutter-pypackage). Ich habe nur "project_slug" geändert, um Konflikte zu vermeiden, aber die anderen sind Standardeinstellungen.

$ cookiecutter https://github.com/audreyr/cookiecutter-pypackage
full_name [Audrey Roy Greenfeld]:
email [[email protected]]:
github_username [audreyr]:
project_name [Python Boilerplate]:
project_slug [python_boilerplate]: python_boilerplate_1234
project_short_description [Python Boilerplate contains all the boilerplate you need to create a Python package.]:
pypi_username [audreyr]:
version [0.1.0]:
use_pytest [n]:
use_pypi_deployment_with_travis [y]:
add_pyup_badge [n]:
Select command_line_interface:
1 - Click
2 - Argparse
3 - No command-line interface
Choose from 1, 2, 3 [1]:
create_author_file [y]:
Select open_source_license:
1 - MIT license
2 - BSD license
3 - ISC license
4 - Apache Software License 2.0
5 - GNU General Public License v3
6 - Not open source
Choose from 1, 2, 3, 4, 5, 6 [1]:

Generieren Sie die Verteilung von Paketen (Quelle + Binär). Stellen Sie sicher, dass die Datei im Ordner "dist" generiert wurde.

$ cd python_boilerplate_1234
$ python3 setup.py sdist
$ python3 setup.py bdist_wheel
$ ls dist
python_boilerplate_1234-0.1.0-py2.py3-none-any.whl  python_boilerplate_1234-0.1.0.tar.gz

Laden Sie das Paket mit "Schnur-Upload" hoch.

$ twine upload --repository-url http://127.0.0.1/legacy/ dist/*
Uploading distributions to http://127.0.0.1/legacy/
Enter your username: ewdurbin
Enter your password:
Uploading python_boilerplate_1234-0.1.0-py2.py3-none-any.whl
100%|███████████████████████████████████████████████████████████████████████████████████████████████████| 9.28k/9.28k [00:05<00:00, 1.73kB/s]
Uploading python_boilerplate_1234-0.1.0.tar.gz
100%|███████████████████████████████████████████████████████████████████████████████████████████████████| 13.2k/13.2k [00:00<00:00, 25.6kB/s]

Wenn der Upload normal abgeschlossen ist, können Sie das Paket über die GUI überprüfen. Sie können auch mit der REST-API auf die Paketinformationen verweisen.

$ curl -s http://127.0.0.1/pypi/python-boilerplate-1234/json | jq '.releases|keys'
[
  "0.1.0"
]

Referenz

Recommended Posts

Ich habe versucht, das Python Package Repository (Warehouse) auszuführen, das PyPI unterstützt
Verschiedene Hinweise zur Verwendung von Python für Projekte
Ich habe es mit Grumpy versucht (Python ausführen).
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe die Bewegung Python3 ausprobiert, die die Richtung im Koordinatensystem ändert
Python: Ich habe das Problem des Handlungsreisenden ausprobiert
Ich habe das Python Tornado Testing Framework ausprobiert
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe versucht, "Birthday Paradox" mit Python zu simulieren
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe zum ersten Mal versucht, Python zu programmieren.
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, mit Python Faiss zu laufen, Go, Rust
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, Python -m summpy.server -h 127.0.0.1 -p 8080 auszuführen
Ich habe versucht, Deep Floor Plan mit Python 3.6.10 auszuführen.
Ich habe versucht, alembic auszuführen, ein Migrationstool für Python
Ich habe versucht, die Python-Bibliothek "pykakasi" zu verwenden, die Kanji in Romaji konvertieren kann.
Ich habe versucht, zwei Jetson Nano-Hardware-PWMs aus der Jetson.GPIO Python-Bibliothek auszuführen.
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Eine Geschichte, die praktisch war, als ich versuchte, das Python-IP-Adressmodul zu verwenden
Ich habe versucht, Pymc auszuführen
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Ich habe versucht, die App auf der IoT-Plattform "Rimotte" auszuführen.
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe Python> autopep8 ausprobiert
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe Python zum ersten Mal mit Heroku ausprobiert
mong - Ich habe versucht, den Code, der zufällig den Containernamen von Docker generiert, nach Python zu portieren. -
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
[Python] Ich habe versucht, einen lokalen Server mit flask auszuführen
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich hatte das Gefühl, dass ich den Python-Code nach C ++ 98 portiert habe.
AWS Lambda unterstützt jetzt Python, also habe ich es versucht
Ich habe Python> Decorator ausprobiert
Ich habe versucht, TensorFlow auszuführen
Ich habe versucht, die API mit dem Python-Client von echonest zu erreichen
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, das Offline-Spracherkennungssystem Julius mit Python in der virtuellen Docker-Umgebung auszuführen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe das in Google Cloud Dataflow vorinstallierte Python-Paket überprüft
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe vorerst versucht, PIFuHD unter Windows auszuführen
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
Erstellen eines Python-Skripts, das die e-Stat-API unterstützt (Version 2)
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Ich habe versucht, das Gesicht aus dem Video zu erkennen (OpenCV: Python-Version)
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln