Conda 安装冲突要求
Conda install conflicting requirements
我正在尝试使用 Conda 从 Pip 需求文件创建环境。文件内容为
requirements.txt
numpy==1.18.2
torch==1.4.0
torchvision==0.5.0
scikit-learn==0.22.2.post1
Pillow==8.3.2
pydicom==1.4.2
pandas==1.0.3
运行命令
conda create -n $name --file requirements.txt
由于缺少频道而出现 PackageNotFound
错误。
我该如何修改?
可能的问题
有一些潜在的问题。
康达pytorch
首先,并非 Conda 中的所有包都使用与其他存储库中相同的名称。部分原因是 Conda 的性质是一个通用包存储库,而不是 language-specific 一个。特别是,torch
模块是通过 Conda pytorch
包提供的。
所以这必须改变。
NumPy 版本不可用
该特定版本的 NumPy 似乎在 defaults 或 conda-forge 频道中不可用。
$ mamba search numpy=1.18.2
No match found for: numpy=1.18.2. Search: *numpy*=1.18.2
PackagesNotFoundError: The following packages are not available from current channels:
- numpy=1.18.2
Current channels:
- https://conda.anaconda.org/conda-forge/osx-64
- https://conda.anaconda.org/conda-forge/noarch
- https://conda.anaconda.org/bioconda/osx-64
- https://conda.anaconda.org/bioconda/noarch
- https://repo.anaconda.com/pkgs/main/osx-64
- https://repo.anaconda.com/pkgs/main/noarch
- https://repo.anaconda.com/pkgs/r/osx-64
- https://repo.anaconda.com/pkgs/r/noarch
为什么会发生这种情况? 对于大多数 Python 包,Conda 在 PyPI 存储库的下游工作。当新版本发布时,Conda Forge 机器人(例如)将 auto-generate 向相应的原料发出拉取请求。有时这些并不能“正常工作”,需要进行一些故障排除才能构建。有时,使构建工作的过程不会在新版本发布之前完成。这会导致更新的拉取请求取代前一个拉取请求,并可能导致旧的拉取请求被放弃。这导致 Conda Forge 对 PyPI 的覆盖范围存在差距,并且是 exactly what happened here.
如果您可以接受不同的版本,conda-forge确实提供了 v1.18.1(下)和 v1.18.4(上)。
否则,如果您需要包版本的精确复制,那么您将不得不从 PyPI 获取它。我会在最后展示这个。
频道问题
缺少频道
OP不表示通道配置。例如,torchvision==0.5.0
包只能通过 pytorch 渠道获得。
屏蔽频道
这里的另一个问题可能是 channel_priority: strict
设置的使用。如果使用此设置,则具有所需版本的频道可能 先验 被 SAT 求解器排除只是因为包(但不是正确的版本)在更高版本中可用优先通道。这些天 channel_priority: flexible
是默认值,可以设置为:
conda config --set channel_priority flexible
解决方案
精确复制(仅限 PyPI)
给出软件包名称和版本,这些软件包可能源自 PyPI。如果您需要精确复制原始环境——比如说,为了重现科学结果——那么我建议从 PyPI 采购所有东西。最好的方法是使用 Conda 获取 Python 和 Pip,然后让 Pip 安装 requirements.txt
.
从软件包版本来看,我们说的是 Python 3.7 或 3.8。您可能只需要 python=3.8
就可以了,但是 [精确估计 from release dates 会是 python=3.8.2
。所以,试试像这样的东西:
environment.yaml
name: my_env
channels:
- conda-forge
dependencies:
- python=3.8.2
- pip
- pip:
- -r requirements.txt
然后用
创建环境
conda env create -n $name -f environment.yaml
确保 requirements.txt
位于包含 YAML 的文件夹中。
如果稍后将包添加到此环境中,我建议只使用 pip install
。否则,Conda may have issues.
Conda-only环境
假设可以替换 numpy=1.18.2
,Conda-only 环境可能类似于:
environment.yaml
name: my_env
channels:
- pytorch
- conda-forge
dependencies:
- python=3.8
- numpy=1.18.1 # alternatively, 1.18.4
- pytorch=1.4.0
- torchvision=0.5.0
- scikit-learn=0.22.2.post1
- pillow=8.3.2
- pydicom=1.4.2
- pandas=1.0.3
再次创建:
conda env create -n $name -f environment.yaml
请注意,在 YAML 中仅使用一个 =
。如果您计划以 ad hoc 方式(例如 conda install
)通过 Conda 安装额外的软件包,这将是最好的方法。
混合Conda-Pip环境
您也可以尝试与上一个基本相似的混合环境,但 Pip 专门提供 numpy==1.18.2
。我不推荐这样做,因为其他依赖项肯定首先从 Conda 引入 NumPy,然后 Pip 会破坏它以提供确切的版本。
我正在尝试使用 Conda 从 Pip 需求文件创建环境。文件内容为
requirements.txt
numpy==1.18.2
torch==1.4.0
torchvision==0.5.0
scikit-learn==0.22.2.post1
Pillow==8.3.2
pydicom==1.4.2
pandas==1.0.3
运行命令
conda create -n $name --file requirements.txt
由于缺少频道而出现 PackageNotFound
错误。
我该如何修改?
可能的问题
有一些潜在的问题。
康达pytorch
首先,并非 Conda 中的所有包都使用与其他存储库中相同的名称。部分原因是 Conda 的性质是一个通用包存储库,而不是 language-specific 一个。特别是,torch
模块是通过 Conda pytorch
包提供的。
所以这必须改变。
NumPy 版本不可用
该特定版本的 NumPy 似乎在 defaults 或 conda-forge 频道中不可用。
$ mamba search numpy=1.18.2
No match found for: numpy=1.18.2. Search: *numpy*=1.18.2
PackagesNotFoundError: The following packages are not available from current channels:
- numpy=1.18.2
Current channels:
- https://conda.anaconda.org/conda-forge/osx-64
- https://conda.anaconda.org/conda-forge/noarch
- https://conda.anaconda.org/bioconda/osx-64
- https://conda.anaconda.org/bioconda/noarch
- https://repo.anaconda.com/pkgs/main/osx-64
- https://repo.anaconda.com/pkgs/main/noarch
- https://repo.anaconda.com/pkgs/r/osx-64
- https://repo.anaconda.com/pkgs/r/noarch
为什么会发生这种情况? 对于大多数 Python 包,Conda 在 PyPI 存储库的下游工作。当新版本发布时,Conda Forge 机器人(例如)将 auto-generate 向相应的原料发出拉取请求。有时这些并不能“正常工作”,需要进行一些故障排除才能构建。有时,使构建工作的过程不会在新版本发布之前完成。这会导致更新的拉取请求取代前一个拉取请求,并可能导致旧的拉取请求被放弃。这导致 Conda Forge 对 PyPI 的覆盖范围存在差距,并且是 exactly what happened here.
如果您可以接受不同的版本,conda-forge确实提供了 v1.18.1(下)和 v1.18.4(上)。
否则,如果您需要包版本的精确复制,那么您将不得不从 PyPI 获取它。我会在最后展示这个。
频道问题
缺少频道
OP不表示通道配置。例如,torchvision==0.5.0
包只能通过 pytorch 渠道获得。
屏蔽频道
这里的另一个问题可能是 channel_priority: strict
设置的使用。如果使用此设置,则具有所需版本的频道可能 先验 被 SAT 求解器排除只是因为包(但不是正确的版本)在更高版本中可用优先通道。这些天 channel_priority: flexible
是默认值,可以设置为:
conda config --set channel_priority flexible
解决方案
精确复制(仅限 PyPI)
给出软件包名称和版本,这些软件包可能源自 PyPI。如果您需要精确复制原始环境——比如说,为了重现科学结果——那么我建议从 PyPI 采购所有东西。最好的方法是使用 Conda 获取 Python 和 Pip,然后让 Pip 安装 requirements.txt
.
从软件包版本来看,我们说的是 Python 3.7 或 3.8。您可能只需要 python=3.8
就可以了,但是 [精确估计 from release dates 会是 python=3.8.2
。所以,试试像这样的东西:
environment.yaml
name: my_env
channels:
- conda-forge
dependencies:
- python=3.8.2
- pip
- pip:
- -r requirements.txt
然后用
创建环境conda env create -n $name -f environment.yaml
确保 requirements.txt
位于包含 YAML 的文件夹中。
如果稍后将包添加到此环境中,我建议只使用 pip install
。否则,Conda may have issues.
Conda-only环境
假设可以替换 numpy=1.18.2
,Conda-only 环境可能类似于:
environment.yaml
name: my_env
channels:
- pytorch
- conda-forge
dependencies:
- python=3.8
- numpy=1.18.1 # alternatively, 1.18.4
- pytorch=1.4.0
- torchvision=0.5.0
- scikit-learn=0.22.2.post1
- pillow=8.3.2
- pydicom=1.4.2
- pandas=1.0.3
再次创建:
conda env create -n $name -f environment.yaml
请注意,在 YAML 中仅使用一个 =
。如果您计划以 ad hoc 方式(例如 conda install
)通过 Conda 安装额外的软件包,这将是最好的方法。
混合Conda-Pip环境
您也可以尝试与上一个基本相似的混合环境,但 Pip 专门提供 numpy==1.18.2
。我不推荐这样做,因为其他依赖项肯定首先从 Conda 引入 NumPy,然后 Pip 会破坏它以提供确切的版本。