J'ai essayé d'exécuter le référentiel de packages Python (entrepôt) qui prend en charge PyPI

Aperçu

--PyPI migre vers l'implémentation du référentiel de nouvelle génération (Warehouse) depuis environ 2018, et ce code source est disponible sur GitHub ( https: // github.com / pypa / entrepôt).

Note d'évaluation

Mémo de procédure lors de l'exécution avec CentOS 7.7.

supposition

Installez docker / docker-compose. Si vous regardez requirements / main.in dans le référentiel GitHub, c'est approprié (y compris ʻelasticsearch et postgresql`). C'est une pile compliquée, mais elle est essentiellement résolue à l'intérieur du conteneur.

Installation

La procédure d'installation est [Entrepôt --Docs »Développement» Mise en route] (https://warehouse.readthedocs.io/development/getting-started/) explique.

Après avoir cloné le code source de github, exécutez la commande make build pour générer un groupe d'images docker.

$ 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

Démarrez le groupe de conteneurs à partir de l'image générée avec la commande suivante.

$ make serve

Une fois le conteneur static complètement démarré, exécutez la commande suivante (par exemple, dans un autre terminal). (S'il n'est pas exécuté, une erreur se produira lors de l'accès à l'interface graphique Web car la base de données n'existe pas)

$ make initdb

Lorsque vous accédez au port 80 avec un navigateur, vous verrez un écran qui est presque le même que pypi. Les principales différences sont les suivantes.

--Le paquet contenu dans le référentiel contient les données de test (l'instantané de test.pypi.org avec les informations privées supprimées).

Vous trouverez ci-dessous un exemple d'exécution de REST-API (Endpoint pour l'acquisition d'informations sur les packages) avec 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"
]

Téléchargement de package

L'enregistrement est possible en changeant simplement la destination de téléchargement à partir d'un client tel que «twine». Voici un exemple de téléchargement de l'exemple de package généré par cookiecuter.

Installez la bibliothèque de prérequis.

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

Générez un exemple de package en utilisant le modèle (ʻaudreyr / cookiecutter-pypackage). J'ai changé seulement project_slug` pour éviter les conflits, mais les autres sont des valeurs par défaut.

$ 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]:

Générer la distribution des packages (source + binaire). Confirmez que le fichier est généré dans le dossier dist.

$ 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

Téléchargez le package avec twine upload.

--Spécifiez l'hôte de entrepôt dans --repository-url ( 127.0.0.1 dans cet exemple). --Utilisez le compte de test entrepôt (ʻewdurbin / mot de passe`) pour les informations d'identification requises pour le téléchargement. - https://warehouse.readthedocs.io/development/getting-started/#logging-in-to-warehouse

$ 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]

Lorsque le téléchargement est terminé normalement, vous pouvez vérifier le package à partir de l'interface graphique. Vous pouvez également consulter les informations du package à l'aide de REST-API.

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

référence

Recommended Posts

J'ai essayé d'exécuter le référentiel de packages Python (entrepôt) qui prend en charge PyPI
Notes diverses sur l'utilisation de python pour les projets
J'ai essayé Grumpy (allez exécuter Python).
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé le mouvement Python3 qui change la direction dans le système de coordonnées
Python: j'ai essayé le problème du voyageur de commerce
J'ai essayé le framework de test Python Tornado
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
J'ai essayé de "lisser" l'image avec Python + OpenCV
[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
J'ai essayé la programmation python pour la première fois.
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'exécuter faiss avec python, Go, Rust
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé d'exécuter python -m summpy.server -h 127.0.0.1 -p 8080
J'ai essayé d'exécuter Deep Floor Plan avec Python 3.6.10.
J'ai essayé d'exécuter alembic, un outil de migration pour Python
J'ai essayé d'utiliser la bibliothèque Python "pykakasi" qui peut convertir des kanji en romaji.
J'ai essayé d'exécuter deux PWM matériels Jetson Nano à partir de la bibliothèque Jetson.GPIO Python.
J'ai essayé de représenter graphiquement les packages installés en Python
Une histoire qui était pratique lorsque j'ai essayé d'utiliser le module d'adresse IP python
J'ai essayé d'exécuter pymc
J'ai essayé Python sur Mac pour la première fois.
J'ai essayé d'exécuter l'application sur la plateforme IoT "Rimotte"
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé Python> autopep8
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé python pour la première fois avec heroku
mong - J'ai essayé de porter le code qui génère de manière aléatoire le nom du conteneur Docker vers Python -
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
Un mémo que j'ai touché au magasin de données avec python
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai senti que j'avais porté le code Python en C ++ 98.
AWS Lambda prend désormais en charge Python, je l'ai donc essayé
J'ai essayé Python> décorateur
J'ai essayé d'exécuter TensorFlow
J'ai essayé de frapper l'API avec le client python d'echonest
J'ai essayé d'exécuter l'exemple de code du module Ansible
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé d'exécuter le système de reconnaissance vocale hors ligne Julius avec python dans l'environnement virtuel Docker
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai vérifié le package Python pré-installé dans Google Cloud Dataflow
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé d'exécuter PIFuHD sur Windows pour le moment
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
Création d'un script Python prenant en charge l'API e-Stat (ver.2)
J'ai essayé "un programme qui supprime les déclarations en double en Python"
J'ai essayé de reconnaître le visage de la vidéo (OpenCV: version python)
J'ai essayé de programmer le test du chi carré en Python et Java.
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia