Как найти существующий пакет deb, соответствующий записи PyPI? - PullRequest
2 голосов
/ 12 января 2020

PyPI имеет много пакетов, и многие из них имеют deb-эквиваленты для определенных c дистрибутивов Debian. Обычно это происходит, добавляя python- или python3- к имени исходного пакета, возможно, с некоторыми другими изменениями, такими как нижний регистр и т. Д. c, но не всегда.

Есть ли хороший способ установить sh PyPI -> Переписка Debian версии X в автоматическом режиме c?

Например, если дан файл requirements.txt (или результат выполнения pip freeze), есть ли инструменты для перечисления Пакеты Debian?

Может быть, есть какая-то служба, которая может, учитывая "имя PyPI", возвращать результат поиска для Debian? Я не очень знаком с инструментами Debian, но, может быть, есть инструмент, который автоматизирует его как часть какого-то процесса, который использует Debian?

Например: alembi c package. Исходный пакет является основой для создания пакетов с префиксом python. И описание указывает, откуда оно взято у . Тогда в PyPI есть страница для определенных c версий файлов (и, возможно, где-то описание метаданных).

Не удается найти его с помощью googling, поскольку результаты поиска часто как сделать свой собственный пакет, который отличается от topi c.

Пока этот процесс отнимает много времени и требует большого количества ручных операций, используя apt-file search -l для запроса пакетов, содержащих определенные файлы.

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Администратор PyPI здесь: насколько мне известно, такого инструмента нет. Python пакеты часто перераспределяются в виде пакетов Debian, при этом исходные сопровождающие практически не вводят данные, и нет никакой гарантии паритета, когда это происходит.

Мне было бы любопытно, почему вы предпочитаете использовать распространяемые пакеты Debian, а не оригинальные пакеты Python. Возможно, это XY Проблема ?

1 голос
/ 14 января 2020

Вдохновленный этим ответом: https://askubuntu.com/a/1912

$ apt-file --package-only --regex search 'alembic\-.*\.egg\-info'
python-alembic
python3-alembic
$ apt-file --package-only --regex search 'setuptools\-.*\.egg\-info'
pypy-setuptools
python-setuptools
python3-setuptools

Не уверен насчет регулярного выражения , скорее всего, его можно значительно улучшить.


Short Python скрипт-обёртка в качестве примера:

import argparse
import subprocess

import pkg_resources  # from 'setuptools'


def _main():
    parser = argparse.ArgumentParser(allow_abbrev=False)
    parser.add_argument(
        'requirements',
        metavar='requirements.txt',
        type=argparse.FileType('r'),
    )
    args = parser.parse_args()
    #
    requirements = [
        requirement.project_name
        for requirement
        in pkg_resources.parse_requirements(args.requirements)
    ]
    print(requirements)
    #
    regex = r'({})\-.*\.egg\-info'.format(
        '|'.join(
            [
                requirement.replace('-', '_')
                for requirement
                in requirements
            ],
        ),
    )
    #
    output = subprocess.check_output(
        [
            'apt-file',
            '--package-only',
            '--regex',
            'search',
            regex,
        ],
    )
    print(output.decode())


if __name__ == '__main__':
    _main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...