[PYTHON] L'histoire de la construction d'un serveur de cache PyPI (avec Docker) et de me rendre un peu heureux à nouveau

J'étais heureux de créer le serveur de cache du référentiel de paquets d'APT (apt-cacher-ng) localement (dans Docker).

J'ai construit un serveur de cache APT dans l'article.

Je suis un utilisateur de Python, donc je voulais gagner du temps non seulement avec apt-get install, mais aussi avec le temps de téléchargement de pip install.

devpi-server

Il semble que vous puissiez facilement créer un serveur de cache PyPI en installant un merveilleux paquet appelé devpi-server.

J'ai également décidé d'écrire ceci dans un Dockerfile.

Notez que pip install a un mécanisme de mise en cache local, donc cette méthode est unique. Cela n'a pas beaucoup de sens si vous n'en installez qu'un seul sur le serveur.

--Lors de la récupération de packages individuellement parmi plusieurs instances de serveur --Lorsque la bande de ligne disponible est petite ou limitée

Particulièrement utile pour.

Dockerfile

Vous trouverez ci-dessous le sujet principal du Dockerfile.

Dockerfile


#
# Build:
#     docker build -t devpi-server .
#
# Run:
#     docker run -d -p 3141:3141 --name devpi-server-run devpi-server
#
FROM ubuntu
EXPOSE 3141
VOLUME ["/var/cache/devpi"]

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
    apt-get install --no-install-recommends -y python3-pip && \
    pip3 install -q -U pip devpi-server

CMD chmod 777 /var/cache/devpi && \
    devpi-server \
        --serverdir /var/cache/devpi \
        --host 0.0.0.0 --port 3141

Comment utiliser

--trusted-hostDans le nom d'hôte du serveur de cache,--index-urlSpécifiez l'url du serveur de cache cible avec.

$ pip install --trusted-host XXX.XXX.XXX.XXX --index-url http://XXX.XXX.XXX.XXX:3141/root/pypi/ package-name

Comme vous pouvez le voir sur https://pip.pypa.io/en/latest/user_guide.html#environment-variables, Les options d'installation de pip peuvent également être contrôlées par des variables d'environnement. Dans ce cas, PIP_ a été utilisé comme préfixe et connecté avec des lettres majuscules et des cas de serpent. Spécifié par PIP_TRUSTED_HOST et PIP_INDEX_URL.

Comparaison

Mesuré avec la commande de temps. Je ne l'ai mesuré qu'une seule fois, donc je n'ai pas fait de comparaison stricte, mais j'ai pensé que c'était suffisant. --No-cache-dir est spécifié pour désactiver le cache local.

$ time pip install --no-cache-dir numpy scipy matplotlib pandas ipython

Pas de cache

real	3m29.583s

Avec cache

real	0m24.950s

Il y a une grosse différence. J'avais l'impression de passer beaucoup de temps à télécharger scipy et matplotlib, surtout sans le cache.

Recommended Posts

L'histoire de la construction d'un serveur de cache PyPI (avec Docker) et de me rendre un peu heureux à nouveau
L'histoire de la création d'une partition de type Hanon avec Python
Un mémo sur la création d'une application Django (Python) avec Docker
Une histoire sur un amateur faisant une rupture de bloc avec python (kivy) ②
Une histoire sur un amateur faisant une rupture de bloc avec python (kivy) ①
Une histoire sur la création d'une courte chanson par hasard avec Sudachi Py
Une histoire sur un débutant de GCP essayant de créer un serveur Micra avec GCE
Une histoire sur l'automatisation du mahjong en ligne (Jakutama) avec OpenCV et l'apprentissage automatique
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Construire un serveur de cache Pypi sur QNAP
Configurer un serveur Samba avec Docker
Une histoire sur l'apprentissage automatique avec Kyasuket
Une histoire sur Python pop and append
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
Une histoire sur la création d'un environnement IDE avec WinPython sur un ancien système d'exploitation Windows.
J'ai essayé de créer un chargeur de démarrage x86 qui peut démarrer vmlinux avec Rust
Démarrez un serveur Web Python simple avec Docker
Une histoire accro aux variables globales et à la portée de Go
Une histoire sur l'implémentation d'un écran de connexion avec django
Lancer un serveur Web avec Python et Flask
Une histoire sur la modification de Python et l'ajout de fonctions