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

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

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

Команда pypimirror выглядит должна быть инициализирована один раз, что необходимо для зеркалирования.

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

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

Ответ 1

Поскольку вы попросили ответить здесь:

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

Ответ 2

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

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

Далее в дорожной карте зеркалируется развертывание нескольких геосети. Чтобы отбросить шины на вашей машине, требуется около 5 минут (см. Инструкции по быстрому запуску). Наконец, devpi совместим как с pip, так и с easy_install (т.е. Вам не нужен клиент devpi, установленный на вашем компьютере).

Надеюсь на эту помощь.

Ответ 3

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

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

  • Добавьте следующее в .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]
    
  • Обновите свой ~/.pip/pip.conf, чтобы указать на новый репозиторий:

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

    Или используйте параметр -i http://localhost/url/to/my/pypi/ в командной строке.

Ответ 4

Если вы говорите о запуске 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.gz в комплекте с их .html-списком, вы можете использовать glob.glob на верхнем уровне вашего каталога сайтов-сайтов - tar.gz каждый каталог по очереди и добавьте результирующее имя файла в список - вы можете сгенерировать свой index.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)

Затем сохраните или покажите страницу.

Ответ 5

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

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

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

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