ResolvePackageNotFound:在MacOS上使用conda和yml文件创建env

时间:2018-03-07 14:57:21

标签: conda virtual-environment

我想使用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

如何解决这个问题?

好吧....堆栈溢出提示我说出更多细节,但我想我清楚地描述了一些事情,很遗憾,堆栈溢出不支持上传附件....

7 个答案:

答案 0 :(得分:24)

我有同样的问题,发现你的问题谷歌搜索它。这是不可接受的,即使您找到了解决方案,也要让其他google成员无法接听。

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

答案 1 :(得分:1)

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


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

在macOS上,例如- pandas=1.0.5=py38h959d312_0的熊猫看起来像这样。 conda env create不能使用它在其他操作系统(例如Docker内部的Linux)上创建相同的环境。

因此,请使用conda env export --from-history从历史记录中导出软件包,而无需固定,以及创建conda环境后专门安装的软件包。

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

答案 2 :(得分:0)

如果您正在查看此书,并且感到太多琐事,无法更改Conda版本 packge=ver=py.*到点子样式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"

答案 3 :(得分:0)

我遇到了同样的问题,发现与此相关的GitHub issue。在评论中,@ kalefranz通过将--no-builds标志与conda env导出结合使用,发布了理想的解决方案。

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

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

希望这会有所帮助。

答案 4 :(得分:0)

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

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

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

let someUserID = "111222333444"

if let access = SecAccessControlCreateWithFlags(nil, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, [.privateKeyUsage], nil) {

    let privateTagString = "com.example.privateKey." + someUserID
    let privateTag = privateTagString.data(using: .utf8)!

    let keyPairSettings: [String: Any] = [
        String(kSecAttrKeyType): kSecAttrKeyTypeEC,
        String(kSecAttrKeySizeInBits): 256,
        String(kSecPrivateKeyAttrs): [
            String(kSecAttrApplicationTag): privateTag,
            String(kSecAttrIsPermanent): true,
            String(kSecAttrAccessControl): access
        ]
    ]

    var publicKey: SecKey?
    var privateKey: SecKey?
    let status = SecKeyGeneratePair(keyPairSettings as CFDictionary, &publicKey, &privateKey)

    if status != errSecSuccess {
        print("An error occured: \(status)")
    } else {
        print("Created keys!")
    }

}

使用以下方法创建:

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

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

使用注释:
Anaconda3 2019.10
Windows10

答案 5 :(得分:0)

我有一个类似的问题,并且能够解决。我的问题与pip无关,而是因为出口平台与进口平台不同(请参阅:https://github.com/conda/conda/issues/7311上nehaljwani在2018年11月的回答)。

@Shixiang Wang的回答指向解决方案的一部分。 no-build参数可提供更大的灵活性,但其中某些组件特定于平台或OS。

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

注意:我得到一个Pip subprocess error,它中断了给定库的安装,可以通过conda install <library>来解决。从那里,我可以重新启动从YML文件的导入。

答案 6 :(得分:0)

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

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