У меня есть файл environment.yml для создания моей среды conda, где один пакет (оболочка python для другого) зависит от файлов .h / .so, предоставленных другим. Допустим,
channels:
- defaults
- conda-forge
dependencies:
- blah=1.2.1
- pip:
- git+https://github.com/pyBlah.git
Пакет blah
сам по себе устанавливается правильно, а заголовочные файлы / .so действительно устанавливаются в соответствующем месте (в папках окружения conda include
и lib
соответственно), но строка pip install
завершается ошибкой потому что он не может найти заголовки.
Я мог бы удалить строку pip
в environment.yml выше и попробовать установить ее после создания / активации среды, например так:
CFLAGS=-I/path/to/env/include LDFLAGS=-L/path/to/env/lib pip install git+https://github.com/pyBlah.git
или выполните что-то вроде Конда установила LD_LIBRARY_PATH только для env
чтобы избежать необходимости явно указывать пути во время pip install
, но выполнение любого из этих действий выглядит как предоставление слишком большого количества деталей и разбиение того, что должно было быть одним единственным шагом установки на множество.
Я думаю, что conda должна делать что-то подобное внутри себя, чтобы разрешить / собрать / установить связанные пакеты, которые она все равно находит в environment.yml.
Итак, мои вопросы двоякие:
Существует ли причина, по которой conda не добавляет подходящие пути include / lib автоматически, так как в противном случае pip
(который в конечном итоге зависит от среды) будет правильно выполнять свою работу после активации среды?
Есть ли канонический способ выполнить установку зависимых пакетов, просто используя соответствующие спецификаторы в environment.yml?