Файл сборки Bazel загружает несколько зависимостей

У меня есть репозиторий Python, содержащий два файла требований. В моем WORKSPACEфайл, я импортировал обе зависимости.

требования-1.txt :

      numpy

требования-2.txt :

      scipy

РАБОЧАЯ ОБЛАСТЬ :

      load("@rules_python//python:pip.bzl", "pip_install")

pip_install(
    name = "deps_1",
    requirements = "//:requirements-1.txt",
)

pip_install(
    name = "deps_2",
    requirements = "//folder2:requirements-2.txt",
)

У меня есть файл BUILD, подобный этому:

      load("@rules_python//python:defs.bzl", "py_library")
load("@deps_1//:requirements.bzl", "requirement")
load("@deps_2//:requirements.bzl", "requirement")


py_library(
    name = "test",
    srcs = ["test.py"],
    deps = [
        requirement("numpy"),
        requirement("scipy"),
    ],
)

Сборка не может импортировать numpy

      no such package '@deps//pypi__numpy': BUILD file not found in directory 'pypi__numpy' of external repository @deps2. Add a BUILD file to a directory to mark it as a package.

Как загрузить две зависимости в один файл BUILD?

1 ответ

В общем, вы можете сделать это, загрузив два requirementс разными именами. Как это:

      load("@deps_1//:requirements.bzl", deps_1_requirement = "requirement")
load("@deps_2//:requirements.bzl", deps_2_requirement = "requirement")

Затем вы можете использовать deps_1_requirement("numpy")а также deps_2_requirement("scipy").

Однако с этими двумя конкретными библиотеками scipy зависит от numpy. Если вы загрузите их оба, вы получите две разные копии numpy. Если они оба одной и той же версии, это, вероятно, сработает. Если это разные версии, вы можете столкнуться со странными проблемами. Я думаю, вы можете просто удалить numpy из списка, и ваш код должен иметь возможность импортировать единственную версию, которую вводит pip/rules_python, потому что это зависимость от scipy.

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