【问题标题】:ResolvePackageNotFound: Create env using conda and yml file on MacOSResolvePackageNotFound:在 MacOS 上使用 conda 和 yml 文件创建 env
【发布时间】:2018-03-07 14:57:20
【问题描述】:

我想使用 conda 和 yml 文件创建一个虚拟环境。

命令:

conda env create -n ex3 -f env.yml

输入 ENTER 它会给出以下消息:

ResolvePackageNotFound:

 - gst-plugins-base==1.8.0=0
 - dbus==1.10.20=0
 - opencv3==3.2.0=np111py35_0
 - qt==5.6.2=5
 - libxcb==1.12=1
 - libgcc==5.2.0=0
 - gstreamer==1.8.0=0

但是,我的 Mac 上确实有这些。我的 MacOS:High Sierra 10.13.3

我的 env.yml 文件如下所示:

name: ex3
channels:
- menpo
- defaults
dependencies:
- cairo=1.14.8=0
- certifi=2016.2.28=py35_0
- cycler=0.10.0=py35_0
- dbus=1.10.20=0
- expat=2.1.0=0
- fontconfig=2.12.1=3
- freetype=2.5.5=2
- glib=2.50.2=1
- gst-plugins-base=1.8.0=0
- gstreamer=1.8.0=0
- harfbuzz=0.9.39=2
- hdf5=1.8.17=2
- icu=54.1=0
- jbig=2.1=0
- jpeg=9b=0
- libffi=3.2.1=1
- libgcc=5.2.0=0
- libgfortran=3.0.0=1
- libiconv=1.14=0
- libpng=1.6.30=1
- libtiff=4.0.6=3
- libxcb=1.12=1
- libxml2=2.9.4=0
- matplotlib=2.0.2=np111py35_0
- mkl=2017.0.3=0
- numpy=1.11.3=py35_0
- openssl=1.0.2l=0
- pandas=0.20.1=np111py35_0
- patsy=0.4.1=py35_0
- pcre=8.39=1
- pip=9.0.1=py35_1
- pixman=0.34.0=0
- pyparsing=2.2.0=py35_0
- pyqt=5.6.0=py35_2
- python=3.5.4=0
- python-dateutil=2.6.1=py35_0
- pytz=2017.2=py35_0
- qt=5.6.2=5
- readline=6.2=2
- scipy=0.19.0=np111py35_0
- seaborn=0.8=py35_0
- setuptools=36.4.0=py35_1
- sip=4.18=py35_0
- six=1.10.0=py35_0
- sqlite=3.13.0=0
- statsmodels=0.8.0=np111py35_0
- tk=8.5.18=0
- wheel=0.29.0=py35_0
- xz=5.2.3=0
- zlib=1.2.11=0
- opencv3=3.2.0=np111py35_0
- pip:
  - bleach==1.5.0
  - enum34==1.1.6
  - html5lib==0.9999999
  - markdown==2.6.11
  - protobuf==3.5.1
  - tensorflow==1.4.1
  - tensorflow-tensorboard==0.4.0
  - werkzeug==0.14.1

如何解决这个问题?

嗯....堆栈溢出提示我说得更详细了,但我想我描述的很清楚,很遗憾,堆栈溢出不支持上传附件....

【问题讨论】:

  • 是的,我可以重现这个,不确定原因...
  • 也许这个文件只适用于 Linux 而不是 MacOS....

标签: conda virtual-environment


【解决方案1】:

我有同样的问题,发现你的问题在谷歌上搜索。

ResolvePackageNotFound 错误描述了所有尚未安装但需要的包。

要解决问题,请将它们移到pip 部分下:

name: ex3
channels:
- menpo
- defaults
dependencies:
  - cairo=1.14.8=0
  - ***
  - another dependencies, except not found ones
  - pip:
    - gst-plugins-base==1.8.0                
    - bleach==1.5.0
    - enum34==1.1.6
    - html5lib==0.9999999
    - markdown==2.6.11
    - protobuf==3.5.1
    - tensorflow==1.4.1
    - tensorflow-tensorboard==0.4.0
    - werkzeug==0.14.1
    *** added ***
    - gst-plugins-base==1.8.0
    - dbus==1.10.20
    - opencv3==3.2.0
    - qt==5.6.2
    - libxcb==1.12
    - libgcc==5.2.0
    - gstreamer==1.8.0

【讨论】:

  • 我在两台 Ubuntu 机器之间遇到了同样的问题,因此 OP 关于它可能与不同操作系统相关的建议似乎并不成立。您的解决方案对我有用,但是通过使用应该将我们从中拯救出来的系统遇到依赖地狱有点遗憾;)
  • 谢谢。为我解决了。
  • 这对我也有用。应将此标记为答案。
  • @LCT 我在两台 Ubuntu 机器上也遇到了同样的问题。我也同意我认为这不是两个不同操作系统的问题。我的猜测(如果有人能在此插话就好了)是某些包已被移动或已被删除。就我而言,这就是两台 Ubuntu 机器之间的区别——已经过去了很多时间。大约一年,我会说。不知何故,我认为 conda 包会“永远存在”,但我想我错了?
  • 这真的取决于你的仓库在哪里可用。对于我的依赖,我通过将- conda-forge 作为默认设置下的通道解决了这个问题。
【解决方案2】:

我遇到了同样的问题,并找到了与此相关的 GitHub issue。在 cmets 中,@kalefranz 通过使用带有 conda env 导出的 --no-builds 标志发布了一个理想的解决方案。

conda env export --no-builds > environment.yml

但是,即使删除内部版本号,某些软件包在不同的操作系统上仍可能具有不同的版本号。我认为最好的方法是为不同的操作系统创建不同的 env yml 文件。

希望这会有所帮助。

【讨论】:

  • 这结合@Northern Poet 的回答有助于解决问题。 Northern Peot 的答案的问题是,有太多包裹让我无法搜索和移动。运行此答案会显着减少数量。
【解决方案3】:

tl;博士conda env export --from-history -n name_of_your_env -f environment.yml


conda env export 命令将您的依赖项固定到确切的版本以及操作系统特定的详细信息。

对于 macOS 上的 Pandas 看起来像这样,例如 - pandas=1.0.5=py38h959d312_0conda env create 不能使用它在其他操作系统上创建相同的环境,例如 Docker 中的 Linux。

因此,使用 conda env export --from-history 从历史中导出未固定的软件包,以及您在创建 conda 环境后专门安装的软件包。

https://repo2docker.readthedocs.io/en/latest/howto/export_environment.html

【讨论】:

  • 我尝试了上述答案。唯一解决了这个问题的就是这个。
【解决方案4】:

ResolvePackageNotFound”错误可能还有另一个原因 - 您需要的软件包版本可能位于默认不搜索的旧版本存储库中。

可以在以下位置找到 Anaconda 存储库中不同位置的路径:
https://repo.continuum.io/pkgs/

我的yml文件[NW_BI.yml]如下:

name: NW_BI
channels:
- 'https://repo.continuum.io/pkgs/free' # Remove this line and it fails!!!
- conda-forge
- defaults
dependencies:
- python=2.7.10
- pandas=0.16.2
- pyodbc=3.0.10

创建使用:

conda env create -f 'path to file'\NW_BI.yml

我想重建一个旧环境!!!!

注意使用:
Anaconda3 2019.10
Windows10

【讨论】:

    【解决方案5】:

    如果您正在查看此内容并觉得更改 Conda 版本太繁琐 packge=ver=py.* 到 pip 样式 package==ver,我编写了这个小脚本,从 Conda 样式中删除了 =py.* 部分。

    请注意下面的代码假设您已经将package=ver 更改为package==ver

    #!/bin/bash
    
    COUNT=0
    find_pip=0
    
    while IFS= read -r line; do
        COUNT=$(( $COUNT + 1 ))
    #    echo "$COUNT"
    #    echo "read it"
        if echo ${line} | grep -q -- "- pip:" ; then
    #        echo "find it"
            find_pip=1
            indent=`awk -F- '{print length($1)}' <<< "$line"`
            pip_indent=$(( $indent + 2 ))
    #        echo $indent
    #    echo $pip_indent
        fi
    
        line_indent=`awk -F- '{print length($1)}' <<< "$line"`
    
        if [[ ${find_pip} ]] && [[ ${pip_indent} -eq ${line_indent} ]]; then
    #        echo "$line"
            new_line=`echo ${line} | cut -d'=' -f-3`
            new_line="    $new_line"
    #        echo "${new_line}"
            sed -e "${COUNT}s/.*/${new_line}/" -i '' $1
        fi
    done < "$1"
    

    【讨论】:

      【解决方案6】:

      我遇到了类似的问题,并且能够解决它。我的问题与 pip 无关,而是因为导出平台与导入平台不同(参考:nehaljwani 2018 年 11 月在 https://github.com/conda/conda/issues/7311 上的回答)。

      @Shixiang Wang 的回答指向部分解决方案。 no-build 参数允许更大的灵活性,但有一些特定于平台或操作系统的组件。

      使用 no-build 导出,我能够(从导入时的错误消息)识别出哪些库有问题,并简单地将它们从 YML 文件中删除。这可能不是完美无缺,但与从头开始相比可以节省大量时间。

      注意:我收到了一个Pip subprocess error,它中断了给定库的安装,这可以通过conda install &lt;library&gt; 简单地解决。从那里我可以从 YML 文件重新启动导入。

      【讨论】:

        【解决方案7】:

        --no-builds 选项用于conda env export

        https://github.com/conda/conda/issues/7311#issuecomment-442320274

        【讨论】:

          猜你喜欢
          • 2022-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-19
          相关资源
          最近更新 更多