如何破解 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 上的包本身说它需要 clang
和 clangxx
。但是我已经安装了 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
时,它不再说我的环境不一致了。但是,当我尝试添加包时,它坚持安装 clang
、clang-13
、clangxx
.
谁有办法完全删除这些依赖项?我想也许它指的是在线文件而不是本地文件,因为我删除了那些必需的库。我 运行 命令提示符: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 虚拟包
对于您想要的自定义配置,创建您自己的 clang
和 clangxx
包的虚拟版本以满足要求并将它们安装到环境中。像
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 频道。
好的,我有一个包 Pythran
,它是 Python 到 C++(PYD 模块)的编译器。 conda-forge 上的包本身说它需要 clang
和 clangxx
。但是我已经安装了 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
时,它不再说我的环境不一致了。但是,当我尝试添加包时,它坚持安装 clang
、clang-13
、clangxx
.
谁有办法完全删除这些依赖项?我想也许它指的是在线文件而不是本地文件,因为我删除了那些必需的库。我 运行 命令提示符: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 虚拟包
对于您想要的自定义配置,创建您自己的 clang
和 clangxx
包的虚拟版本以满足要求并将它们安装到环境中。像
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 频道。