Сконфигурируйте сборку conda, чтобы исключить некоторые папки из вывода пакета conda

ТЛ; др:

Как исключить папки из упаковки conda build?

контекст

Я строю свои первые пакеты с conda build,

Мой файл meta.yaml выглядит так:

package:
    name: 'some_name'
    version: {{ load_setup_py_data().get('version') }}

source:
    path: ./

build:
    script: python setup.py install --single-version-externally-managed --record=record.txt

requirements:
    run:
        - python >=3.6
        - pandas >=0.2
        - numpy >=1.12
        # Packages that must be installed
        # in the user's conda environment
        # to run this package.

    build:
        # Packages used by setup.py
        # to install this package.
        # May also install compilers
        # for non-python code.
        - python
        - setuptools

И мой корневой каталог (где находятся файлы setup.py & meta.yaml) выглядит так:

$ ls
README.md   __pycache__      input       isi_classif meta.yaml   
notebooks   output      scripts     setup.py    version.py

Некоторые папки есть только потому, что они были полезны при создании прототипов, но я не хочу удалять их из репозитория.

Как исключить папку (как input или же notebooks здесь) и его содержимое из пакета, который собирает Конда?

Для информации, я строю с помощью следующей команды:

$ conda build some_folder_name

3 ответа

Я наткнулся на эту ветку, пытаясь решить аналогичную проблему. Поскольку мойmeta.yaml находится в подпапке корня проекта, и я хотел исключить только файлы, которые не были частью репо (например, .tox folder), я закончил тем, что использовал сам репозиторий, чтобы указать файлы, которые нужно включить, следующим образом:

...  
source:
    git_url: ..
...

Примечание:

  • то .tox папка на самом деле не была включена в окончательный пакет conda - я просто хотел избежать conda-build скопировать большую папку без уважительной причины.
  • возможно, удастся достичь того, чего вы хотите, если ваши дополнительные элементы будут жить только в определенной ветке репозитория и использовать другую ветку без этих элементов для вашей сборки - подробности см. в документации.

Я думаю, что лучшим способом было бы создать каталог recipe/и переместите туда файлы, связанные с рецептами. Затем измените meta.yaml на

      source:
    path: ./..

Таким образом, conda скопирует в пакет только содержимое каталога рецептов. Во-вторых, папки notebooksа также inputбудут включены только в том случае, если они указаны в setup.py для включения. В противном случае они игнорируются. Поэтому они не устанавливаются как часть setup.py installи не будет включено в пакет. Таким образом, ваша исходная структура каталогов будет выглядеть так:

      some_folder_name
|--README.md
|--__pycache__
|--input
|--isi_classif
|--recipe
   |--meta.yaml   
|--notebooks
|--output
|--scripts
|--setup.py
|--version.py

тогда вы все равно можете собрать пакет, используя conda build some_folder_name

Я ищу ответ, и все, что я нашел, уже было в комментарии к вопросу. Поскольку эти решения кажутся работающими (не такими, как задумано, но все еще работают), я объясню это здесь. Я пробую второе решение на тестовом проекте, и оно работает. Я еще не привык к конде.

Во-первых: явный вывод

Явные списки файлов:

Явные списки файлов - это относительные пути от корня префикса сборки. Явные списки файлов поддерживают глобальные выражения. Имена каталогов также поддерживаются, и они рекурсивно включают содержимое.

outputs:
  - name: subpackage-name
    files:
      - a-file
      - a-folder
      - *.some-extension
      - somefolder/*.some-extension

Скрипты, перемещающие файлы в префикс сборки:

Скрипты, которые создают или перемещают файлы в префикс сборки, могут быть скриптами любого типа. Для известных типов сценариев достаточно указать только имя сценария. В настоящее время список распознанных расширений - это py, bat, ps1 и sh.

outputs:
  - name: subpackage-name
    script: move-files.py

Указание файлов для включения в вывод

Во-вторых: игнорировать файлы префиксов

Чтобы указать отдельные имена файлов, используйте:

build:   ignore_prefix_files:
- file1

Игнорировать файлы префиксов

Я не пробовал ответить Майкла Сарахана, но он должен работать, если все сделано правильно.

"Вам нужно изменить свой build.sh/bld.bat, чтобы удалить файлы из $PREFIX до завершения этих сценариев".

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