¿cómo crear un índice de repositorio pypi propio local sin mirror?


Tenemos varios paquetes python propios y queremos crear un repositorio pypi local para ellos usando una interfaz simple como https://pypi.python.org/simple /

Este repositorio lo quiero crear solo para local sin ningún mirror debido a razones de seguridad, y será puesto bajo el control de apache

El comando pypimirror looks tiene que ser inicializado una vez, que necesita reflejar.

¿Cómo puedo generar un Índice PyPI Simple basado en paquetes python locales?

Cualquier otro scripts simples para esto ?

Author: Larry Cai, 2013-08-05

5 answers

Ya que pediste responder aquí:

Echa un vistazo a pip2pi, parece ser exactamente lo que usted está buscando.

 19
Author: K Z,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-06 03:12:55

Teníamos una necesidad similar en mi empresa. Básicamente, ¿cómo podemos subir paquetes de "código cerrado" a un índice mientras podemos instalarlos como si estuvieran en PyPI?

Hemos patrocinado un proyecto llamado devpi que actúa como una caché PyPI (los paquetes a los que accede desde PyPI se almacenarán en caché en su servidor), así como un servidor de índice potente y rápido. La documentación está disponible en http://doc.devpi.net/latest/.

Lo siguiente en la hoja de ruta es la duplicación de múltiples geos despliegue. Para patear los neumáticos en su máquina tarda unos 5 minutos (consulte las guías de inicio rápido). Finalmente devpi es compatible con pip y easy_install (es decir, no necesita el cliente devpi instalado en su máquina).

Espero que esto ayude.

 22
Author: Laurent Brack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-23 18:57:35

No hay nada especial en el espejo, y puedes usar mod_rewrite para configurarlo tú mismo.

  1. Vuelca tus paquetes en un directorio que está asignado a una URL. Aquí estoy usando /url/to/my/pypi/ un ejemplo. La jerarquía de carpetas debe ser /foo/bar/simple/[name of package]/[name of tarball]

  2. Agregue lo siguiente a .htaccess o a la configuración global para ese directorio donde se encuentran los paquetes. El último bloque de líneas es un retroceso al índice 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. Actualiza tu ~/.pip/pip.conf al punto al nuevo repositorio:

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

    O utilice la opción -i http://localhost/url/to/my/pypi/ en la línea de comandos.

 7
Author: Burhan Khalid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-05 10:57:30

Si está hablando de ejecutar simplepypi, entonces tendrá su servidor para agregar paquetes y servirlos. Para citar la documentación:

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

    python setup.py sdist upload -r local

Si utilizara os.walk o glob.glob en su directorio local site-packages, podría filtrar rápidamente setup.py en cada uno de los paquetes/directorios e invocar lo anterior en ellos.

Si solo necesita crear un directorio de tar.archivos gz completos con a .lista html de ellos entonces usted puede utilizar glob.glob en la cima nivel de su directorio site-packages-tar.gz cada directorio a su vez y añadir el nombre de archivo resultante a una lista-a continuación, puede generar su índice.html de esa lista.

Puede usar cualquiera de los muchos motores de template para esto o generarlo usted mismo:

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)

Luego guarde o sirva su página.

 3
Author: Steve Barnes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-05 10:49:28

La forma más sencilla es organizar los distfiles de paquetes en dirs con nombre de paquete y ejecutar un simple servidor HTTP. No se necesitan paquetes adicionales, el stdlib de Python es suficiente. Ejemplo de estructura de directorios:

└── 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 
    ...

Inicie el servidor:

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

El repositorio local está en funcionamiento. Ahora puedes pasar el repositorio a pip:

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

O incluso persistir la URL repo en el pip.conf para no introducirla cada vez:

# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000
 3
Author: hoefling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-02 10:07:27