如何破解 Anaconda3 Python 的 conda 以忽略包依赖性?修改 conda-meta package JSON depends flag,但还不够

How to hack conda for Anaconda3 Python to ignore package dependencies? Modified conda-meta package JSON depends flag, but it's not enough

好的,我有一个包 Pythran,它是 Python 到 C++(PYD 模块)的编译器。 conda-forge 上的包本身说它需要 clangclangxx。但是我已经安装了 MS Build Tools clang-12,所以根本没有使用这些包。

现在每次我去 conda install [package_name] 它告诉我我的环境不一致,因为我强制删除了我不需要(或想要)的 clang 库:

conda remove clang clangxx clang-13 --force

所以我四处看了看东西的安装。而且我发现有一个\Anaconda3\conda-meta\pythran-0.11.0-py39h832f523_0.json(注意版本变化后的名字)...

所以我向上打开那个文件,向下滚动到:

 "depends": [
    "beniget 0.4.*",
    "decorator",
    "gast 0.5.*",
    "numpy >=1.19.5,<2.0a0",
    "ply >=3.4",
    "python >=3.9,<3.10.0a0",
    "python_abi 3.9.* *_cp39",
    "xsimd >=8.0.5,<8.1"
  ],

其中有我手动删除的这些条目:

"clang",
"clangxx",

所以现在当我转到 运行 conda 时,它不再说我的环境不一致了。但是,当我尝试添加包时,它坚持安装 clangclang-13clangxx.

谁有办法完全删除这些依赖项?我想也许它指的是在线文件而不是本地文件,因为我删除了那些必需的库。我 运行 命令提示符:findstr /S /C:'clang' * 这就像从 Linux 调用 grep。它显示了在某处引用 clang 的所有文件。除了我已经删除的内容之外,它没有在任何地方被引用,因此我很困惑。

是的,我知道像 conda 这样的包管理器应该确保您的环境正常工作。但是我可以编译 Python 到 C++ 到 PYD(模块),这些 clang 库丢失时完全没有问题。因为路径中已经有 clang-12 了。这比其他任何事情都更令人烦恼,因为每个软件包安装/升级都一直想要安装不需要的 clang-13 库...

虚拟包

更简洁的解决方案是创建一个可以安装的虚拟包,作为相应软件已在系统上可用的指示器。这就是 Conda Forge provides for the mpich package. Specifically, they provide an external build (see recipe),安装

conda install mpich=*=external_*

创建 clang 虚拟包

对于您想要的自定义配置,创建您自己的 clangclangxx 包的虚拟版本以满足要求并将它们安装到环境中。像

meta.yaml

{% set version = "12.0.1" %}
{% set build = 0 %}

package:
  name: clang-dummies
  version: {{ version }}

build:
  number: {{ build }}

outputs:
  - name: clang
    string: external_{{ build }}
  - name: clangxx
    string: external_{{ build }}

about:
  license: GPL-3.0-only
  summary: Dummy package for external clang(xx) compiler.

构建此 (conda build .) 后,您可以使用

安装这些本地版本
conda install --use-local clang=12=external* clangxx=12=external*

或将它们上传到用户 Anaconda Cloud 频道。