如何破解 Anaconda3 Python 的 conda 以忽略包依赖项?修改后的 conda-meta 包 JSON 依赖于标志,但这还不够



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

现在,每次我转到conda install [package_name]时,它都会告诉我的环境不一致,因为我通过:强制删除了我不需要(或不想要(的clang库

conda remove clang clangxx clang-13 --force

所以我四处看了看安装的东西。我发现有一个\Anaconda3\conda meta\pythran-0.111.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为mpich包提供的功能。具体来说,它们提供外部构建(请参阅配方(,该构建与一起安装

conda install 'mpich=*=external_*'

创建叮当作响的虚拟包

对于您想要的自定义配置,创建您自己的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频道。

最新更新