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

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

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

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

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

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


person Larry Cai    schedule 05.08.2013    source источник
comment
возможный дубликат Настройка локального сервера PyPi с собственный набор пакетов   -  person Piotr Dobrogost    schedule 24.01.2014
comment
возможный дубликат Как свернуть мой собственный pypi?   -  person aquavitae    schedule 27.01.2014


Ответы (5)


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

Взгляните на pip2pi, похоже, это именно то, что вы ищете.

person K Z    schedule 06.08.2013
comment
это самый простой способ справиться с моим случаем - person Larry Cai; 06.08.2013
comment
Похоже, что pip2pi предназначен для общедоступных пакетов, которые уже есть в PyPI, верно? Я думал, что первоначальный вопрос был о создании репозитория для пакетов, разработанных внутри компании. - person Ken Williams; 20.01.2017
comment
Кажется, это не поддерживается. В апреле сообщалось об серьезной ошибке, которая не была устранена сопровождающими. пиар для исправления также остается незамеченным. - person Brian McCutchon; 23.08.2018
comment
Я согласен с @BrianMcCutchon. Я просто потратил два дня, пытаясь заставить pip2pi работать, прежде чем обнаружил ошибку (или ошибки), из-за которой он не работал у меня. Если вы разрабатываете веб-приложение, я бы предложил pypiserver, так как это то, что я в итоге использовал. Если вы разрабатываете приложения на Python, dev.pi, вероятно, будет лучшим выбором. Просто не используйте pip2pi. - person Jim; 07.03.2019
comment
@Jim Ну, PR наконец-то объединили, и сопровождающий добавил другого сопровождающего, так что теперь его лучше поддерживать. - person Brian McCutchon; 07.03.2019
comment
написал скрипт, который создает простой репозиторий с N последними версиями 4000 наиболее часто используемых пакетов на pypi. Преимущество в том, что он может содержать несколько версий, как в pypi. gist.github.com/harisankar-krishna-swamy/ - person quiet_penguin; 28.05.2021

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

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

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

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

person Laurent Brack    schedule 27.08.2013
comment
Немного излишне для моего простого случая, но я голосую за него, так как он выглядит довольно стабильным и простым в использовании. - person Larry Cai; 28.08.2013
comment
devpi — это именно то, что я искал. Он действует как сервер pypi, и вы можете использовать команду pip по умолчанию для управления пакетами. Простота настройки и простота в использовании. Для использования в виртуальной среде демон может быть запущен/остановлен в хуках post(de)activate. - person Bouke; 30.04.2014

Самый простой способ — организовать дистрибутивные файлы пакетов в каталоги с именами пакетов и запустить простой 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 9000
$ # or for Python 2:
$ python2 -m SimpleHTTPServer 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

Ссылка: Руководство пользователя по упаковке Python, Размещение собственного простого репозитория

person hoefling    schedule 01.07.2018

В зеркале нет ничего особенного, и вы можете использовать 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/
    

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

person Burhan Khalid    schedule 05.08.2013
comment
Вы должны выполнить только часть «Параметры + индексы» шага № 2 для локального только в соответствии с запросом вопроса. Но прозрачное перенаправление на pypi для вещей, которые не являются локальными, также полезно. :) - person dannysauer; 14.08.2015

Если вы говорите о запуске 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)

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

person Steve Barnes    schedule 05.08.2013