10

tl;博士:

你如何排除被打包的文件夹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

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

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

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

$ conda build some_folder_name
4

3 回答 3

1

我认为最好的方法是创建一个目录recipe/并将与配方相关的文件移动到那里。然后将 meta.yaml 更改为

source:
    path: ./..

所以只有配方目录的内容会被 conda 复制到包中。其次,只有在 setup.py 中指定了要包含的文件夹notebooksinput才会包含这些文件夹。否则它们将被忽略。所以它们没有作为 的一部分安装,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

于 2020-12-09T03:56:59.013 回答
0

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

第一:显式输出

显式文件列表:

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

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

忽略前缀文件

我没有尝试 Michael Sarahan 的答案,但如果正确完成它应该可以工作。

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

于 2019-07-18T16:13:47.580 回答
0

我在尝试解决类似问题时遇到了这个线程。由于我meta.yaml位于项目根目录的子文件夹中,并且我只想排除不属于 repo 的文件(例如.tox文件夹),因此我最终使用存储库本身来指定要包含的文件,如下所示:

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

笔记:

  • .tox文件夹实际上并未包含在最终的 conda 包中 - 我只是想避免conda-build无缘无故地复制一个大文件夹。
  • 通过让您的附加项目仅存在于 repo 的特定分支中,并使用没有这些项目的不同分支进行构建,可以实现您想要的 - 有关详细信息,请参阅文档
于 2020-06-26T09:17:20.827 回答