comment créer son propre index de dépôt pypi sans miroir?

nous avons plusieurs paquets python et nous voulons créer un dépôt pypi local pour eux en utilisant une interface simple comme https://pypi.python.org/simple /

ce dépôt que je veux créer pour le local seulement sans miroirs pour des raisons de sécurité, et il sera placé sous le contrôle d'apache

la commande pypimirror looks doit être initialisée une fois, ce qui doit refléter.

Comment puis-je générer un Index simple PyPi basé sur les paquets python locaux.

D'Autres scripts simples pour ça ?

31
demandé sur Larry Cai 2013-08-05 10:58:25

5 réponses

puisque vous avez demandé de répondre ici:

regardez pip2pi , c'est exactement ce que vous cherchez.

19
répondu K Z 2013-08-06 03:12:55

nous avions un besoin similaire dans mon entreprise. Fondamentalement, comment pouvons-nous télécharger des paquets "closed source" vers un index tout en étant capable de les installer comme s'ils étaient sur PyPI?

nous avons sponsorisé un projet appelé devpi qui agit comme un cache PyPI (les paquets auxquels vous accédez depuis PyPI seront mis en cache sur votre serveur) ainsi que comme un serveur d'index puissant et rapide. La documentation est disponible à http://doc.devpi.net/latest / .

la prochaine étape de la feuille de route est la création d'un miroir pour le déploiement multi geos. Il faut environ 5 minutes pour tirer sur les pneus de votre machine (voir les guides de démarrage rapide). Enfin, devpi est compatible avec pip et easy_install (c'est-à-dire que vous n'avez pas besoin du client devpi installé sur votre machine).

Espérons que cette aide.

22
répondu Laurent Brack 2018-08-23 18:57:35

il n'y a rien de spécial dans le miroir, et vous pouvez utiliser mod_rewrite pour le configurer vous-même.

  1. Dump votre colis dans un répertoire qui est mappé à une URL. Ici, j'utilise /url/to/my/pypi/ comme exemple. La hiérarchie des dossiers devrait être /foo/bar/simple/[name of package]/[name of tarball]

  2. ajouter ce qui suit à .htaccess ou à la configuration globale de ce répertoire où se trouvent vos paquets. Le dernier bloc de lignes est un retour à l'indice global pypi:

    Options +Indexes
    
    RewriteEngine On
    
    RewriteRule ^/robots.txt - [L]
    RewriteRule ^/icons/.* - [L]
    RewriteRule ^/index\..* - [L]
    
    RewriteCond /foo/bar/simple/ !-f
    RewriteCond /foo/bar/simple/ !-d
    RewriteRule ^/(.*)/?$ http://pypi.python.org/ [R,L]
    
  3. mise à Jour de votre ~/.pip/pip.conf pour pointer vers le nouveau référentiel:

    [global]
    index-url = http://localhost/url/to/my/pypi/
    

    ou utilisez l'option -i http://localhost/url/to/my/pypi/ en ligne de commande.

7
répondu Burhan Khalid 2013-08-05 10:57:30

si vous parlez d'exécuter simplepypi, alors vous aurez votre serveur pour ajouter des paquets et les servir. Pour citer la documentation:

- Running this on the setup.py of your favorite package:

    python setup.py sdist upload -r local

si vous utilisiez os.walk ou glob.glob sur votre site local-répertoire packages, vous pourriez rapidement filtrer pour setup.py dans chacun des paquets/répertoires et invoquer ce qui précède sur eux.

Si vous avez juste besoin de créer un répertoire de goudron.les fichiers gz complet avec un .html liste d'entre eux, alors vous pouvez utiliser glob.glob au niveau supérieur de votre site-packages directory - tar.gz chaque répertoire tour à tour et ajouter le nom de fichier résultant à une liste - vous pouvez alors générer votre index.html à partir de cette liste.

vous pouvez utiliser n'importe lequel d'un grand nombre de modèle moteurs pour ceci ou le générer vous-même:

import glob
filelist = glob.glob("*.tar.gz")
tags = ['<A href="file:Where/%s">%s</A>' % (s,s) for s in tags]
head = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="Generator" CONTENT="Python Script">
<META NAME="Keywords" CONTENT="Cheeseshop">
<META NAME="Description" CONTENT="List of local python packages">
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">
"""
tail = """</BODY></HTML>"""
tags.insert(0,head)
tags.append(tail)
page = "\n".join(tags)

puis sauvegarder ou servir la page.

3
répondu Steve Barnes 2013-08-05 10:49:28

la manière la plus simple est d'organiser les paquets distfiles en paquets nommés DRS et d'exécuter un simple serveur HTTP. Pas besoin de paquets supplémentaires, le stdlib de Python est suffisant. Exemple de structure de répertoire:

└── repodir
    ├── setuptools
    │   └── setuptools-38.1.0-py2.py3-none-any.whl 
    │   └── setuptools-38.1.0.zip
    │   └── setuptools-39.2.0-py2.py3-none-any.whl 
    │   └── setuptools-39.2.0.zip
    ├── wheel
    │   └── wheel-0.31.1-py2.py3-none-any.whl 
    ...

démarrer le serveur:

$ cd repodir/
$ python3 -m http.server -p 9000
$ # or for Python 2:
$ python2 -m SimpleHTTPServer -p 9000

Le local repo est en place et en cours d'exécution. Maintenant vous pouvez passer le rapport à pip :

$ pip install wheel --extra-index-url=http://127.0.0.1:9000

ou même persister l'URL repo dans le pip.conf à ne pas l'entrer chaque fois:

# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000
3
répondu hoefling 2018-07-02 10:07:27