web-dev-qa-db-fra.com

comment créer un index de référentiel pypi local sans miroir?

Nous avons plusieurs propres packages python et nous voulons créer un référentiel pypi local pour eux en utilisant une interface simple comme https://pypi.python.org/simple/

Ce référentiel que je veux créer pour le local uniquement sans miroir 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 être mis en miroir.

Comment puis-je générer un index simple PyPi basé sur des packages locaux python.

D'autres scripts simples pour cela?

32
Larry Cai

Puisque vous avez demandé à répondre ici:

Jeter un coup d'œil à pip2pi , il semble que ce soit exactement ce que vous recherchez.

20
K Z

Nous avions un besoin similaire dans mon entreprise. Fondamentalement, comment pouvons-nous télécharger des packages "sources fermées" dans un index tout en étant capables de les installer comme s'ils étaient sur PyPI?

Nous avons parrainé un projet appelé devpi qui agit comme un cache PyPI (les packages auxquels vous accédez depuis PyPI seront mis en cache sur votre serveur) ainsi qu'un serveur d'indexation puissant et rapide. La documentation est disponible sur http://doc.devpi.net/latest/ .

La prochaine étape de la feuille de route est la mise en miroir pour le déploiement multi-géos. Le démarrage des pneus de votre machine prend environ 5 minutes (consultez les guides de démarrage rapide). Enfin, devpi est compatible avec pip et easy_install (c'est-à-dire que vous n'avez pas besoin que le client devpi soit installé sur votre machine).

J'espère que cette aide.

24
Laurent Brack

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

  1. Vider vos packages dans un répertoire mappé sur une URL. Ici, j'utilise /url/to/my/pypi/ an un exemple. La hiérarchie des dossiers doit être /foo/bar/simple/[name of package]/[name of tarball]

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

    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. Mettez à jour votre ~/.pip/pip.conf pour pointer vers le nouveau référentiel:

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

    Ou utilisez le -i http://localhost/url/to/my/pypi/ option sur la ligne de commande.

7
Burhan Khalid

Si vous parlez d'exécuter simplepypi, vous aurez votre serveur pour ajouter des packages 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 deviez utiliser os.walk ou glob.glob sur votre répertoire local de packages de site, vous pouvez rapidement filtrer pour setup.py dans chacun des packages/répertoires et invoquez ce qui précède dessus.

Si vous avez juste besoin de créer un répertoire de fichiers tar.gz avec une liste .html, alors vous pouvez utiliser glob.glob au niveau supérieur de votre répertoire site-packages - tar.gz chaque répertoire tour à tour et ajouter le résultat nom de fichier dans une liste - vous pouvez ensuite générer votre index.html à partir de cette liste.

Vous pouvez utiliser n'importe lequel d'un grand nombre de moteurs modèle pour cela 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)

Ensuite, enregistrez ou diffusez votre page.

3
Steve Barnes

Le moyen le plus simple consiste à organiser les fichiers de packages dans des répertoires nommés par package et à exécuter un simple serveur HTTP. Aucun paquet supplémentaire n'est nécessaire, stdlib de Python suffit. 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émarrez le serveur:

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

Le dépôt local est opérationnel. Vous pouvez maintenant passer le dépôt à pip:

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

ou même conserver l'URL du dépôt dans le pip.conf à ne pas saisir à chaque fois:

# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000

Référence: Guide de l'utilisateur de Python Packaging, Hébergement de votre propre référentiel simple

3
hoefling