Указание репо для определенного пакета в pip

У меня есть частный пакет, имя которого конфликтует с общедоступным пакетом, найденным на PyPi. К сожалению, поскольку общедоступная версия выше, чем мой частный пакет, простойpip install <package_x> команда находит общедоступную версию вместо моего частного пакета.

В результате:

PyPi (public) hosts package_x==1.5.0
PrivateRepo (private) hosts package_x==1.3.0

я бы хотел pip install package_x чтобы установить частную версию 1.3.0 без необходимости указывать версию или индекс в команде pip install (исключительно через файл конфигурации).

Я пытаюсь настроить свою конфигурацию pip, чтобы смотреть только на конкретное частное репо для одного пакета, но как частное репо, так и стандартное https://pypi.python.org/simple/репо для всего остального. Я попытался установить частное репо в качестве моего URL-адреса индекса и PyPi в качестве URL-адреса дополнительного индекса, но он все равно будет искать в обоих репозиториях самую последнюю версию пакета.

Есть ли способ указать в моей конфигурации pip конкретное репо для использования для данного пакета? В идеале примерно так:

[global]
force-index: https://privaterepo.net/simple
    - package_x

4 ответа

Если вы используете Pip , вы можете добавить --extra-index-urlв requirements.txtчтобы указать дополнительные репозитории следующим образом:

      --extra-index-url=https://your-private-pypi-repo.com/simple
Flask==2.0.2
helloworld==0.1.0

К сожалению, в настоящее время это невозможно с помощью одной конфигурации.

Одна вещь, которую вы можете обойти, - это установить из файла требований, который позволяет вам указать index-url на основе пакета, например:

requirements.txt:

package_y==1.2.3
package_x==1.3.0 --index-url https://privaterepo.net/simple
package_z==1.2.3

тогда ты бы pip install -r requirements.txt вместо.

Вы можете использовать Pipenv для этого.

Из документов :

      [[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[[source]]
url = "http://pypi.home.kennethreitz.org/simple"
verify_ssl = false
name = "home"

[dev-packages]

[packages]
requests = {version="*", index="home"}
maya = {version="*", index="pypi"}
records = "*"

Вышеупомянутое позволяет установить maya из PyPi, в то время как requests будет установлен из пользовательского (частного?) индекса пакета.

Несколько вопросов: ваш приватный пакет чем-то отличается от публичного? Если нет, то почему бы просто не установить номер версии?

Во-вторых, если это так, почему бы не переименовать его, чтобы pypi не нашел его в общедоступных репозиториях?

И, наконец, почему бы не написать сценарий оболочки? Исключите этот частный пакет из файла requirements.txt и вместо этого напишите сценарий оболочки, который установит правильный пакет + оставшиеся требования.

Другие вопросы по тегам