配置conda构建以从conda包输出中排除某些文件夹

god*_*dot 7 python python-module anaconda conda conda-build

tl; dr:

如何排除打包文件夹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
Run Code Online (Sandbox Code Playgroud)

我的根目录(位于setup.py和meta.yaml文件中)如下所示:

$ ls
README.md   __pycache__      input       isi_classif meta.yaml   
notebooks   output      scripts     setup.py    version.py
Run Code Online (Sandbox Code Playgroud)

有些文件夹之所以存在,是因为它们在原型制作过程中很有用,但我不想从存储库中删除它们。

如何从conda构建的程序包中排除文件夹(如inputnotebooks此处)及其内容?

有关信息,我使用以下命令进行构建:

$ conda build some_folder_name
Run Code Online (Sandbox Code Playgroud)

Dor*_*rba 0

我正在寻找答案,我发现的所有内容都已经在问题的评论中。由于这些解决方案似乎有效(未按预期但仍然有效),我将在这里进行解释。我在测试项目中尝试了第二种解决方案,它有效。我还是不习惯conda。

第一:显式输出

显式文件列表:

显式文件列表是从构建前缀的根开始的相对路径。显式文件列表支持 glob 表达式。还支持目录名称,并且它们递归地包含内容。

outputs:
  - name: subpackage-name
    files:
      - a-file
      - a-folder
      - *.some-extension
      - somefolder/*.some-extension
Run Code Online (Sandbox Code Playgroud)

将文件移动到构建前缀的脚本:

创建文件或将文件移动到构建前缀的脚本可以是任何类型的脚本。已知的脚本类型只需要指定脚本名称。目前可识别的扩展名列表是 py、bat、ps1 和 sh。

outputs:
  - name: subpackage-name
    script: move-files.py
Run Code Online (Sandbox Code Playgroud)

指定要包含在输出中的文件

第二:忽略前缀文件

要指定单个文件名,请使用:

build:   ignore_prefix_files:
- file1
Run Code Online (Sandbox Code Playgroud)

忽略前缀文件

我没有尝试迈克尔萨拉汉的答案,但如果正确完成,它应该可以工作。

“您需要更改 build.sh/bld.bat 以在这些脚本结束之前从 $PREFIX 中删除文件。”