как создать локальный собственный индекс репозитория pypi без зеркала?

У нас есть несколько собственных пакетов python и мы хотим создать локальный репозиторий pypi для них, используя простой интерфейс, такой какhttps://pypi.python.org/simple/

этот репозиторий я хочу создать только для локальных без каких-либо зеркал по соображениям безопасности, и он будет находиться под контролем apache

команда pypimirror looks должен быть инициализирован один раз, который должен отражать.

Как я могу создать простой индекс PyPi на основе локального python пакеты.

другие простые скрипты для этого ?

5 ответов


Так как вы попросили ответить здесь:

посмотри pip2pi, похоже, это именно то, что вы ищете.


У нас была аналогичная потребность в моей компании. В принципе, как мы можем загружать пакеты с "закрытым исходным кодом" в индекс, имея возможность установить их, как если бы они были на PyPI?

мы спонсировали проект под названием devpi который действует как кэш PyPI (пакеты, к которым вы получаете доступ из PyPI, будут кэшироваться на вашем сервере), а также мощный и быстрый сервер индексирования. Документация доступна по адресуhttp://doc.devpi.net/latest/.

далее "дорожная карта" зеркальное отображение для развертывания нескольких geos. Удар шины на вашей машине занимает около 5 минут (см. краткое руководство). Наконец devpi совместим с Pip и easy_install (т. е. не требуется установки devpi клиент на вашей машине).

надеюсь, что это поможет.


нет ничего особенного в зеркало, и вы можете использовать mod_rewrite установить его себе.

  1. дамп пакетов в каталоге, который сопоставлен с URL-адресом. Здесь я использую /url/to/my/pypi/ например. Иерархия папок должна быть /foo/bar/simple/[name of package]/[name of tarball]

  2. добавить .htaccess или глобальная конфигурация для того каталога, в котором находятся пакеты. Последний блок строк-это возврат к глобальному 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. обновить ~/.pip/pip.conf чтобы указать на новый репозиторий:

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

    или использовать в командной строке.


если вы говорите о запуске simplepypi, то вы будете иметь свой сервер для добавления пакетов и обслуживать их. Чтобы процитировать документацию:

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

    python setup.py sdist upload -r local

если вы должны были использовать либо os.walk или glob.glob на вашем локальном сайте-каталог пакетов вы можете быстро фильтровать для setup.py в каждом из пакетов/каталоги и вызвать выше на них.

Если вам просто нужно создать каталог tar.ГЗ полные файлы .html список их тогда вы можете использовать Глоб.glob на верхнем уровне вашего сайта-каталог пакетов-tar.gz каждый каталог по очереди и добавить полученное имя файла в список-вы можете создать свой индекс.HTML из этого списка.

вы можете использовать любое из большого количества шаблон двигатели для этого или создайте его сами:

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)

затем сохранить или служить вам страницы.


самый простой способ-организовать дистрибутивы пакетов в пакеты с именем dirs и запустить простой HTTP-сервер. Никаких дополнительных пакетов не требуется, достаточно stdlib Python. Пример структуры каталогов:

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

запустить сервер:

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

локальное РЕПО запущено. Теперь вы можете передать РЕПО в pip:

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

или даже сохранить URL-адрес РЕПО в pip.conf чтобы не вводить его каждый раз:

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