pip получает пакет из python pypi вместо моего собственного сервера - PullRequest
0 голосов
/ 12 декабря 2018

По какой-то причине я не могу понять, pip получает пакет из глобального pypi, а не с моего собственного сервера.Мой пакет, назовем его foo, имеет зависимость bar.

pip search --index-url https://example.com/simple foo

Возвращает мой пакет.

pip install --index-url https://example.com/simple foo

Приводит к ошибке, потому что не может загрузить bar.

  Could not find a version that satisfies the requirement bar (from foo) (from versions: )
No matching distribution found for bar (from foo)

pip install --index-url https://example.com/simple --extra-index-url https://pypi.python.org/simple foo

хорошо, так что проблема должна быть решена прямо сейчас?он получит foo из моего индекса и bar из pypi, верно?хорошо ... я боюсь, что это не так.С этим конфигом, вместо загрузки foo из моего индекса, он загружает пакет foo в pypi.Даже после установки, если я снова запускаю pip search foo, он обнаружит мой как latest, но глобальный как installed

Для целей тестирования, чтобы получить чистую базовую линию, я попытался с помощью python:3.7-alpine, тот же результат.

В качестве обходного пути я установил версию пакета как yzt-0.1, чтобы я мог специально установить foo:yzt-0.1 и, поскольку он не найдет его в глобальном, он будет установлен с моегоСделки рЕПО.

1 Ответ

0 голосов
/ 13 декабря 2018

Хорошо, проблема была в том, как работает pip.Если версия не указана, она всегда будет загружать последнюю версию, даже если это означает, что она будет получена из индекса extra, тогда как в основном индексе существует другая.

В моем случае мой пакет был 0.1, но был один с тем же именем в pypi с 0.1.1, поэтому, когда я передавал --extra-index-url https://pypi.python.org/simple для установки зависимостей, pip фактически использовал этот индекс, чтобы также загрузить версию 0.1.1.

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

  • Измените имя пакета на что-то уникальное, например username-packagename.
  • Добавьте какой-либо идентификатор в версию, чтобы вы могли установить эту конкретную версию.Почему идентификатор?Поскольку пакет в pypi может иметь ту же версию, что и ваша.

В моем случае я предпочитаю второй вариант, потому что он более чистый.С первым вам нужно import username-packagename, что является более уродливым ИМО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...