好吧,我有一个包Pythran
,它是Python到C++(PYD模块(的编译器。conda-forge上的包本身表示需要clang
和clangxx
。但是我已经安装了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
时,它不再说我的环境不一致了。但是,当我尝试添加包时,它坚持安装clang
、clang-13
、clangxx
。
有人能完全删除这些依赖关系吗?我想可能是指在线文件而不是本地文件,因为我删除了那些必需的库。我运行了一个命令提示符:findstr /S /C:'clang' *
,这就像从Linux调用grep一样。它显示了在某个地方引用clang
的所有文件。除了我已经删除的内容外,其他地方都没有引用它,所以我很困惑。
是的,我知道像conda
这样的包管理器应该确保您的环境正常工作。但是,我可以将Python编译为C++,再编译为PYD(模块(,因为缺少这些clang
库,所以没有任何问题。因为我已经在路径中有了clang-12
。这比其他任何事情都更令人烦恼,因为每个软件包安装/升级都希望安装不需要的clang-13
库。。。
虚拟包
更干净的解决方案是创建一个可以安装的虚拟包,作为相应软件在系统上已经可用的指示器。这就是Conda Forge为mpich
包提供的功能。具体来说,它们提供外部构建(请参阅配方(,该构建与一起安装
conda install 'mpich=*=external_*'
创建叮当作响的虚拟包
对于您想要的自定义配置,创建您自己的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频道。