Сборка пакета conda из локальной программы на C ++ - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь создать (и позже загрузить) пакет conda, который будет содержать мою пользовательскую программу, разработанную мной на C ++.
Упрощая проблему, у меня есть следующее meta.yaml:

package:
  name: CoolName
  version: "1.0.0"

source:
  path: ./source

requirements:
  build:
    - make

и следующие build.sh:

make

У меня есть два вопроса:
1) Как и куда мне копировать двоичный файл, полученный в результате компиляции make, чтобы он действительно распознается при активации среды?
2) Как мне указать g ++ как зависимость? Я хотел бы, чтобы этот пакет был позже доступен для linux-64 и osx-64 ... В процессе сборки (в Makefile) я использую только g ++.


Edit

Я изменил свой сценарий сборки, чтобы он имел:

make
mkdir -p $PREFIX/bin
cp my_binary $PREFIX/bin/my_binary

И теперь conda-build успешно. Однако, когда я позже пытаюсь установить пакет локально с conda install --use-local, я получаю:

Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.

Но это не так, мой двоичный файл нигде не установлен и не распознается ...

1 Ответ

1 голос
/ 30 мая 2020
  1. Как и куда мне копировать двоичный файл, который является результатом компиляции make, чтобы он действительно распознавался при активации среды?

Как вы упомянули в вашем редактировании установите где-нибудь в пределах ${PREFIX}

Как мне указать g ++ в качестве зависимости?

Чтобы использовать компиляторы, предоставляемые conda (а не системный компилятор), используйте это:

requirements:
  build:
    - {{ compiler('cxx') }}

Я бы хотел, чтобы этот пакет был позже доступен для linux -64 и osx-64 ... В процессе сборки (в Makefile) я использую только g ++.

Примечание. На Ma c будет использоваться clang++, а не g++. Убедитесь, что ваш Makefile учитывает переменную среды ${CXX} вместо жесткой кодировки g++.

Однако, когда я позже попытаюсь установить пакет локально с помощью conda install --use-local, я получаю:

Это странно. conda install --use-local CoolName должен делать то, что вы хотите. Но вот некоторые вещи, которые можно попробовать:

  • Дважды проверьте содержимое среды, в которую вы пытаетесь установить его:

      conda list
    
  • Попробуйте установить в среде fre sh:

      conda create -n my-new-env --use-local CoolName
    
  • Удалите все устаревшие версии пакета, которые вы могли создать до его успешной сборки:

# Inspect the packages you've created,
# and consider deleting all but the most recent one.
ls $(conda info --base)/conda-bld/linux-64/CoolName*.tar.bz2

... затем попробуйте запустить conda install еще раз.

...