故障排除#

在 Windows 批处理脚本中使用 Conda 提前退出#

在 Conda 4.6+ 中,您与 Conda 交互的方式是通过批处理脚本 (%PREFIX%\condabin\conda.bat)。不幸的是,这意味着从其他批处理脚本使用 Conda 有点复杂。当从批处理脚本内部使用批处理脚本时,您必须在命令前加上 CALL。如果您没有这样做,您的调用 Conda 的批处理脚本将在使用 Conda 后立即退出。换句话说,如果您在 .bat 文件中写下以下内容

conda create myenv python
conda activate myenv
echo test

激活和 echo 都不会发生。您必须在您的批处理脚本中写下以下内容

CALL conda create myenv python
CALL conda activate myenv
echo test

这是 cmd.exe 的已知行为,我们还没有找到任何更改它的方法。 https://stackoverflow.com/questions/4798879/how-do-i-run-a-batch-script-from-within-a-batch-script/4798965

NumPy MKL 库加载失败#

像这样的错误消息

Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll

The ordinal 241 could not be located in the the dynamic link library

原因#

NumPy 无法加载正确的 MKL 或 Intel OpenMP 运行时库。这几乎总是由以下两件事之一引起

  1. 包含 NumPy 的环境尚未激活。

  2. 另一个软件供应商已将 MKL 或 Intel OpenMP (libiomp5md.dll) 文件安装到 C:\Windows\System32 文件夹中。这些文件在 Anaconda 的文件之前被加载,并且不兼容。

解决方案#

如果您没有激活您的环境,请从执行此操作开始。更多信息请参见 激活环境。如果您仍然遇到问题,您可能需要考虑更激进的措施。

  1. 从 C:\Windows\System32 中删除所有与 MKL 相关的文件。我们建议您将它们重命名以在文件名中添加 .bak 以有效地隐藏它们。观察其他软件是否出现故障。尝试将 DLL 文件移到出现故障的软件的 .exe 旁边。如果它再次工作,您可以将文件保持在移动状态 - Anaconda 不需要 System32 中的 MKL,其他软件也不应该需要它。如果您发现有软件将软件安装在此处,请联系该软件的创建者。通知他们,将 MKL 安装到全局位置的做法很脆弱,会导致其他人的软件出现故障,并且会浪费大量时间。请参阅以下罪魁祸首列表。

  2. 您可以尝试 Anaconda 构建到 Python 中的特殊 DLL 加载模式。这会将 DLL 搜索路径从 System32 优先更改为将 System32 作为 PATH 上的另一个条目,从而允许 conda 环境中的库在 System32 中的库之前找到。对该功能的控制是通过环境变量进行的。只有这些构建之外的 Python 构建才会对这些环境变量做出反应

    • Python 2.7.15 构建 14

    • Python 3.6.8 构建 7

    • Python 3.7.2 构建 8

    从默认通道更新 Python

    conda update -c defaults python
    

    注意

    Anaconda 在其构建的 Python 中构建了特殊的补丁以启用此功能。如果您从其他地方获取 Python 软件包(例如 conda-forge),这些标志可能不起作用。

    控制环境变量

    • CONDA_DLL_SEARCH_MODIFICATION_ENABLE

    • CONDA_DLL_SEARCH_MODIFICATION_DEBUG

    • CONDA_DLL_SEARCH_MODIFICATION_NEVER_ADD_WINDOWS_DIRECTORY

    • CONDA_DLL_SEARCH_MODIFICATION_NEVER_ADD_CWD

    要在 Windows 上设置变量,您可以使用 CLI 或 Windows GUI。

    这些应该设置为 1 的值以启用它们。例如,在终端中

    set CONDA_DLL_SEARCH_MODIFICATION_ENABLE=1
    

注意

最后,只有 CONDA_DLL_SEARCH_MODIFICATION_ENABLE 应该被设置。

将 Intel 库安装到 C:\Windows\System32 的已知软件列表

  • Amplitube,由 IK Multimedia 提供

  • ASIO4ALL,由 Michael Tippach 提供

如果您发现其他软件,请告诉我们。如果您在列表中并且想要修复问题,请告诉我们。在任何情况下,conda 问题跟踪器 conda/conda#issues 都是与我们联系的最佳方式。

SSL 连接错误#

这是一个有许多原因的广泛错误。以下列出我们已经见过的错误。

CondaHTTPError: HTTP 000 CONNECTION FAILED#

如果您使用的是 Windows 并看到此错误,请在错误文本中向下查看。您是否看到类似以下内容?

SSLError(MaxRetryError('HTTPSConnectionPool(host=\'repo.anaconda.com\', port=443): Max retries exceeded with url: /pkgs/r/win-32/repodata.json.bz2 (Caused by SSLError("Can\'t connect to HTTPS URL because the SSL module is not available."))'))

其中的关键部分是最后一点

Caused by SSLError("Can\'t connect to HTTPS URL because the SSL module is not available.")

Conda 遇到问题,因为它找不到需要的 OpenSSL 库。

原因#

您可能在 conda 更新后看到此错误。更新版本的 conda 和 Python 构建对环境激活要求更加严格。我们正在努力为它们提供更好的错误消息,但现在的情况是这样的。Windows 依赖于 PATH 环境变量来定位不在当前文件夹中也不在 C:\Windows\System32 文件夹中的库。在 PATH 文件夹中搜索库是从左到右进行的。如果您选择将 Anaconda 的文件夹添加到 PATH,则其中有几个文件夹

  • (安装根目录)

  • (安装根目录)/Library/(MSYS2 env)/bin ## 依赖于 MSYS2 包

  • (安装根目录)/Library/mingw-w64/bin

  • (安装根目录)/Library/usr/bin

  • (安装根目录)/Library/bin

  • (安装根目录)/Scripts

  • (安装根目录)/bin

  • (安装根目录)/condabin

早期安装的 Anaconda 将这些路径添加到 PATH。这最终是脆弱的,因为 Anaconda 不是系统上唯一的软件。如果其他软件有类似命名的可执行文件或库,并且在 PATH 中更早,Anaconda 可能会出现问题。另一方面,如果 Anaconda 在 PATH 顺序中更早并且遮蔽了任何其他可执行文件或库,Anaconda 可能会破坏其他软件。为了使这更容易,我们开始推荐“激活”而不是修改 PATH。激活是一个工具,conda 设置您的 PATH,并且还运行任何自定义包脚本,这些脚本通常用于设置软件运行所需的额外环境变量(例如 JAVA_HOME)。因为激活仅在本地终端会话中运行(与永久 PATH 条目相反),所以将 Anaconda 的 PATH 条目放在最前面是安全的。这意味着当您运行 Anaconda 时,Anaconda 的库将获得更高的优先级,但当您不运行 Anaconda 时,Anaconda 不会干扰其他软件。

Anaconda 的 Python 解释器长期以来一直包含一个补丁,将 (安装根目录)/Library/bin 文件夹添加到该 Python 的 PATH。不幸的是,这在使用该 Python 解释器时干扰了对 PATH 的推理。我们在 Python 3.7.0 中删除了该补丁,我们对这给没有激活环境并且没有在 PATH 中设置适当条目的人造成了问题表示歉意。我们正在尝试一些方法,允许我们的可执行文件减少对 PATH 的依赖,并更加了解它们需要的库加载路径。不过,现在解决此问题的唯一方法是正确管理 PATH。

我们认为,激活是确保事物正常工作的最简单方法。有关激活的更多信息,请参见 激活环境

解决方案#

使用从 Anaconda Navigator 打开的 shell。如果您使用 GUI IDE 并且您看到此错误,请要求 IDE 的开发人员为 conda 环境添加激活。

SSL 证书错误#

原因#

如果您没有与包存储库建立安全连接所需的证书,安装包可能会产生“连接失败”错误。

解决方案#

Pip 可以使用 --use-feature=truststore 选项使用操作系统证书存储。这在通常具有 https 流量检查的公司环境中可能会有所帮助,在这种环境中,公司 CA 安装在操作系统证书存储中

pip install --use-feature=truststore

Conda 有一个类似的选项

conda config --set ssl_verify truststore

或者,pip 可以使用 --trusted-host 选项来指示存储库的 URL 是可信的

pip install --trusted-host pypi.org

Conda 有三个类似的选项。

  1. --insecure-k 选项忽略所有主机的证书验证错误。

    运行 conda create --help 显示

    Networking Options:
      -k, --insecure        Allow conda to perform "insecure" SSL connections and
                            transfers. Equivalent to setting 'ssl_verify' to
                            'False'.
    
  2. 配置选项 ssl_verify 可以设置为 False

    运行 conda config --describe ssl_verify 显示

    # # ssl_verify (bool, str)
    # #   aliases: verify_ssl
    # #   conda verifies SSL certificates for HTTPS requests, just like a web
    # #   browser. By default, SSL verification is enabled and conda operations
    # #   will fail if a required URL's certificate cannot be verified. Setting
    # #   ssl_verify to False disables certification verification. The value for
    # #   ssl_verify can also be (1) a path to a CA bundle file, (2) a path to a
    # #   directory containing certificates of trusted CA, or (3) 'truststore'
    # #   to use the operating system certificate store.
    # #
    # ssl_verify: true
    

    运行 conda config --set ssl_verify false 修改 ~/.condarc 并为该用户执行的所有未来的 conda 操作设置 -k 标志。运行 conda config --help 显示其他配置范围选项。

    当使用 conda config 时,默认情况下使用用户在 ~/.condarc 处的 conda 配置文件。标志 --system 将改为写入所有用户在 <CONDA_BASE_ENV>/.condarc 处的系统配置文件。标志 --env 将改为写入活动 conda 环境在 <PATH_TO_ACTIVE_CONDA_ENV>/.condarc 处的配置文件。如果使用了 --env 并且没有活动的环境,则使用用户配置文件。

  3. 配置选项 ssl_verify 可用于安装新的证书。

    运行 conda config --describe ssl_verify 显示

    # # ssl_verify (bool, str)
    # #   aliases: verify_ssl
    # #   conda verifies SSL certificates for HTTPS requests, just like a web
    # #   browser. By default, SSL verification is enabled, and conda operations
    # #   will fail if a required URL's certificate cannot be verified. Setting
    # #   ssl_verify to False disables certification verification. The value for
    # #   ssl_verify can also be (1) a path to a CA bundle file, (2) a path to a
    # #   directory containing certificates of trusted CA, or (3) 'truststore'
    # #   to use the operating system certificate store.
    # #
    # ssl_verify: true
    

    您的网络管理员可以为您提供网络防火墙的证书捆绑包。然后可以将 ssl_verify 设置为该证书颁发机构 (CA) 捆绑包的路径,并且包安装操作将完成而不会出现连接错误。

    当使用 conda config 时,默认情况下使用用户在 ~/.condarc 处的 conda 配置文件。标志 --system 将改为写入所有用户在 <CONDA_BASE_ENV>/.condarc 处的系统配置文件。标志 --env 将改为写入活动 conda 环境在 <PATH_TO_ACTIVE_CONDA_ENV>/.condarc 处的配置文件。如果使用了 --env 并且没有活动的环境,则使用用户配置文件。

SSL 验证错误#

原因#

此错误可能是由 Windows 上缺少激活或证书过期造成的

SSL verification error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

解决方案#

确保您的 conda 处于最新状态:conda --version

如果不是,请运行:conda update conda

尝试使用操作系统证书存储。使用以下命令将您的 ssl_verify 变量设置为 truststore

conda config --set ssl_verify truststore

如果使用操作系统证书存储无法解决您的问题,请暂时将您的 ssl_verify 变量设置为 false,升级 requests 包,然后使用以下命令将 ssl_verify 设置回 true

conda config --set ssl_verify false
conda update requests
conda config --set ssl_verify true

您还可以将 ssl_verify 设置为指向证书的字符串路径,该路径可用于验证 SSL 连接。修改您的 .condarc 并包含以下内容

ssl_verify: path-to-cert/chain/filename.ext

如果存储库使用自签名证书,请使用指向证书的实际路径。如果存储库由私有证书颁发机构 (CA) 签名,则该文件需要包含根证书和任何中间证书。

安装期间出现权限被拒错误#

原因#

umask 命令确定掩码设置,这些设置控制为新创建的文件设置文件权限的方式。如果您有非常严格的 umask,例如 077,您会收到“权限被拒”错误。

解决方案#

在调用 conda 命令之前,设置不太严格的 umask。Conda 旨在用作用户空间工具,但用户通常需要在全局环境中使用它。这可能会出错的一个地方是具有限制性的文件权限。Conda 在您安装必须由系统上的其他人读取的文件时创建链接。

要为自己提供对文件和目录的完全权限,但阻止组和其他用户访问

  1. 在安装之前,将 umask 设置为 007

  2. 安装 conda。

  3. umask 恢复为原始设置

    umask 007
    conda install
    umask 077
    

有关 umask 的更多信息,请参见 http://en.wikipedia.org/wiki/Umask

使用 sudo conda 命令后出现权限被拒错误#

解决方案#

使用 sudo 运行 conda 后,您必须永远使用 sudo。我们建议您永远不要使用 sudo 运行 conda。

已安装错误消息#

原因#

如果您试图在不删除当前安装的情况下修复 conda 问题,并且尝试重新安装 Miniconda 或 Anaconda 来修复它,您将收到一条错误消息,指出 Miniconda 或 Anaconda 已安装,您无法继续。

解决方案#

使用 --force 选项安装。

Miniconda 下载页面 下载并安装适合您的操作系统的 Miniconda,使用强制选项 --force-f

bash Miniconda3-latest-MacOSX-x86_64.sh -f

注意

将适当的文件名和版本替换为您的操作系统。

注意

确保您安装到与现有安装相同的位置,以便它覆盖核心 conda 文件,而不是在新文件夹中安装重复项。

Conda 报告已安装包,但它似乎没有安装#

有时 conda 声称某个包已安装,但它似乎没有安装,例如,导致 ImportError 的 Python 包。

此问题有几个可能的原因,每个原因都有自己的解决方案。

原因#

您不在与您的包相同的 conda 环境中。

解决方案#

  1. 确保您在与您的包相同的 conda 环境中。 conda info 命令会在 default environment 下告诉您当前激活了哪个环境。

  2. 通过运行以下命令来验证您是否正在使用来自正确环境的 Python

    import sys
    
    print(sys.prefix)
    

原因#

对于 Python 包,您已设置了 PYTHONPATHPYTHONHOME 变量。这些环境变量会导致 Python 从标准位置以外的位置加载文件。当未设置这些环境变量时,Conda 运行效果最佳,因为 conda 环境消除了它们的典型用例,而一个常见问题是它们会导致 Python 选择错误的或损坏的库版本。

解决方案#

对于 Python 包,请确保您没有设置 PYTHONPATHPYTHONHOME 变量。命令 conda info -a 将显示这些环境变量的值。

  • 要临时取消设置当前终端会话的这些环境变量,请运行 unset PYTHONPATH

  • 要永久取消设置它们,请检查以下文件中的行:

    • 如果您使用 bash---~/.bashrc~/.bash_profile~/.profile

    • 如果您使用 zsh---~/.zshrc

    • 如果您在 Windows 上使用 PowerShell,则为 $PROFILE 输出的文件。

原因#

您有特定于站点的目录,或者对于 Python,您有所谓的特定于站点的文件。这些通常位于 macOS 和 Linux 上的 ~/.local 中。有关特定于站点的包位置的完整描述,请参阅 PEP 370。与 PYTHONPATH 一样,Python 可能会尝试从该目录导入包,这会导致问题。

解决方案#

对于 Python 包,请删除特定于站点的目录和特定于站点的文件。

原因#

对于 C 库,已设置以下环境变量:

  • macOS---DYLD_LIBRARY_PATH

  • Linux---LD_LIBRARY_PATH

这些类似于 Python 中的 PYTHONPATH。如果设置了这些变量,它们会导致库从 conda 环境以外的位置加载。Conda 环境消除了大多数使用这些变量的用例。命令 conda info -a 会显示这些变量的设置值。

解决方案#

取消设置 DYLD_LIBRARY_PATHLD_LIBRARY_PATH

原因#

偶尔,安装的包会损坏。Conda 通过将包解压缩到 pkgs 目录中,然后将它们硬链接到环境来工作。有时这些会损坏,从而破坏所有使用它们的程序。它们还会破坏任何其他环境,因为每次都会对相同文件进行硬链接。

解决方案#

运行命令 conda install -f 以再次解压缩包并重新链接它。它还会对包进行 MD5 验证。通常,如果这不同,那是因为您的频道已更改,并且存在具有相同名称、版本和构建号的不同包。

注意

这会破坏对已安装此包的任何其他环境的链接,因此您也必须在这些环境中重新安装它。这也意味着如果您的环境很多,则频繁运行 conda install -f 会占用大量的磁盘空间。

注意

-fconda install (--force) 意味着 --no-deps,因此 conda install -f package 不会重新安装 package 的任何依赖项。

pkg_resources.DistributionNotFound: conda==3.6.1-6-gb31b0d4-dirty#

原因#

conda 的本地版本需要更新。

解决方案#

强制重新安装 conda。使用 conda 开发版本的一种有用方法是在 conda GitHub 存储库的签出上运行 python setup.py develop。但是,如果您没有定期运行 git pull,那么最好取消开发,因为您将不会获得任何对 conda 的定期更新。通常这样做的方法是运行 python setup.py develop -u

但是,此命令不会替换 conda 脚本本身。对于其他包,这不是问题,因为您可以使用 conda 重新安装它们,但如果安装了 conda,则无法使用 conda。

解决方法是使用 conda git 存储库中的 ./bin/conda 可执行文件来强制重新安装 conda。也就是说,运行 ./bin/conda install -f conda。然后,您可以使用 conda info 验证您是否拥有最新版本的 conda,而不是 git 签出。该版本不应包含任何哈希值。

macOS 错误“ValueError unknown locale: UTF-8”#

原因#

这是 macOS 终端应用程序中的一个错误,它仅在某些区域设置中才会出现。区域设置是国家/地区语言组合。

解决方案#

  1. /Applications/Utilities 中打开终端

  2. 清除启动时设置区域设置环境变量复选框。

    ../_images/conda_locale.jpg

这会将您的 LANG 环境变量设置为为空。这可能会导致终端使用不正确的区域设置设置。终端中的 locale 命令会告诉您使用了哪些设置。

要使用正确的语言,请将一行添加到您的 bash 配置文件中,该文件通常是 ~/.profile

export LANG=your-lang

注意

用您语言的正确区域设置说明符替换 your-lang

命令 locale -a 会显示所有说明符。例如,美国英语的语言代码是 en_US.UTF-8。区域设置会影响何时使用翻译以及日期、货币和十进制的格式。

AttributeError 或缺少 getproxies#

当运行诸如 conda update ipython 之类的命令时,您可能会收到 AttributeError: 'module' object has no attribute 'getproxies'

原因#

这可能是由于 requests 的旧版本或设置了 PYTHONPATH 环境变量造成的。

解决方案#

更新 requests 并确保未设置 PYTHONPATH

  1. 运行 conda info -a 以显示 requests 版本和各种环境变量(例如 PYTHONPATH)。

  2. 使用 pip install -U requests 更新 requests 版本。

  3. 清除 PYTHONPATH

    • 在 Windows 上,请清除环境变量设置。

    • 在 macOS 和 Linux 上,请通过从 bash 配置文件中删除它并重新启动 shell 来清除它。

从错误位置打开的 shell 命令#

当您在 conda 环境中运行命令时,conda 无法访问正确的包可执行文件。

原因#

在 bash 和 zsh 中,当您输入命令时,shell 会依次搜索 PATH 中的路径,直到找到该命令。然后,shell 会缓存该位置,在 shell 术语中称为哈希。当您再次运行命令时,shell 不必再次搜索 PATH。

问题在于,在您安装该程序之前,您运行了一个命令,该命令在 PATH 上的另一个位置(例如 /usr/bin)加载并哈希了该程序的另一个版本。然后您使用 conda install 安装了该程序,但 shell 仍然具有已哈希的旧实例。

解决方案#

重新激活环境或运行 hash -r(在 bash 中)或 rehash(在 zsh 中)。

当您运行 conda activate 时,conda 会自动在 bash 中运行 hash -r 并在 zsh 中运行 rehash 以清除哈希命令,因此 conda 会在 PATH 上的新路径中找到内容。但是,当运行 conda install 时,无法执行此操作,因为必须在 shell 本身中运行该命令,这意味着您要么必须自己运行该命令,要么使用包含该命令的源文件。

这是一个相对罕见的问题,因为这种情况只发生在以下情况下

  1. 你激活了一个环境或使用了根环境,然后从其他地方运行了一个命令。

  2. 然后你使用 conda install 安装了一个程序,然后试图在没有运行 activatedeactivate 的情况下再次运行该程序。

命令 type command_name 总是准确地告诉你正在运行什么。这比 which command_name 更好,后者会忽略散列命令并直接搜索 PATH。散列会被 conda activate 或 bash 中的 hash -r 以及 zsh 中的 rehash 重置。

程序由于调用 conda Python 而不是系统 Python 而失败 #

原因 #

安装 Anaconda 或 Miniconda 后,运行 python 的程序会从调用系统 Python 切换到调用根 conda 环境中的 Python。如果这些程序依赖于系统 Python 具有根 conda 环境 Python 中没有的某些配置或依赖项,则程序可能会崩溃。例如,Linux Mint 上 Cinnamon 桌面环境的一些用户报告了这些崩溃。

解决方案 #

编辑你的 .bash_profile.bashrc 文件,以便 conda 二进制目录(例如 ~/miniconda3/bin)不再被添加到 PATH 环境变量中。你仍然可以通过使用它们的完整路径名(例如 ~/miniconda3/bin/conda)来运行 conda activateconda deactivate

你也可以创建一个文件夹,其中包含到 conda activateconda deactivate 的符号链接,然后编辑你的 .bash_profile.bashrc 文件,将此文件夹添加到你的 PATH 中。如果你这样做,运行 python 将调用系统 Python,但运行 conda 命令、conda activate MyEnvconda activate rootconda deactivate 将正常工作。

在运行 conda activate 激活任何环境(包括运行 conda activate root 之后)后,运行 python 将调用活动 conda 环境中的 Python。

UnsatisfiableSpecifications 错误 #

原因 #

某些 conda 包安装规范无法满足。例如,conda create -n tmp python=3 wxpython=3 会产生“Unsatisfiable Specifications”错误,因为 wxPython 3 依赖于 Python 2.7,因此安装 Python 3 的规范与安装 wxPython 3 的规范冲突。

当向 conda 发出无法满足的请求时,conda 会显示类似以下的提示信息

The following specifications were found to be in conflict:
- python 3*
- wxpython 3* -> python 2.7*
Use ``conda search <package> --info`` to see the dependencies
for each package.

这表明安装 wxpython 3 的规范依赖于安装 Python 2.7,这与安装 Python 3 的规范冲突。

解决方案 #

使用 conda search wxpython --infoconda search 'wxpython=3' --info 来显示有关此包及其依赖项的信息

wxpython 3.0 py27_0
-------------------
file name   : wxpython-3.0-py27_0.tar.bz2
name        : wxpython
version     : 3.0
build number: 0
build string: py27_0
channel     : defaults
size        : 34.1 MB
date        : 2014-01-10
fn          : wxpython-3.0-py27_0.tar.bz2
license_family: Other
md5         : adc6285edfd29a28224c410a39d4bdad
priority    : 2
schannel    : defaults
url         : https://repo.continuum.io/pkgs/free/osx-64/wxpython-3.0-py27_0.tar.bz2
dependencies:
    python 2.7*
    python.app

通过检查每个包的依赖项,你应该能够确定安装请求为何产生冲突,并修改请求,以便在没有冲突的情况下满足它。在这个例子中,你可以使用 Python 2.7 安装 wxPython

conda create -n tmp python=2.7 wxpython=3

从特定通道安装包失败 #

原因 #

有时需要从特定通道安装特定版本,因为该版本在默认通道中不可用。

解决方案 #

以下示例详细描述了该问题及其解决方案。

假设你需要使用 Python 3.4 安装 Python cx_freeze 模块。第一步是创建一个 Python 3.4 环境

conda create -n py34 python=3.4

使用此环境,你应该首先尝试

conda install -n py34 cx_freeze

但是,当你这样做时,你会收到以下错误

Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata .........
Solving package specifications: .
Error: Package missing in current osx-64 channels:
- cx_freeze

You can search for packages on anaconda.org with

  anaconda search -t conda cx_freeze

该提示信息表明在默认的包通道中找不到 cx_freeze。但是,可能存在社区创建的版本,你可以通过运行以下命令来搜索它

$ anaconda search -t conda cx_freeze
Using Anaconda Cloud api site https://api.anaconda.org
Run 'anaconda show <USER/PACKAGE>' to get more details:
Packages:
     Name                      |  Version | Package Types   | Platforms
     ------------------------- |   ------ | --------------- | ---------------
     inso/cx_freeze            |    4.3.3 | conda           | linux-64
     pyzo/cx_freeze            |    4.3.3 | conda           | linux-64, win-32, win-64, linux-32, osx-64
                                          : http://cx-freeze.sourceforge.net/
     silg2/cx_freeze           |    4.3.4 | conda           | linux-64
                                          : create standalone executables from Python scripts
     takluyver/cx_freeze       |    4.3.3 | conda           | linux-64
Found 4 packages

在这个例子中,你可以尝试从 4 个不同的位置获取包。它们都没有得到 Anaconda 的官方支持或认可,但 conda 社区成员提供了许多有价值的包。如果你想听取公众意见,那么 Web 界面 提供了更多信息

cx_freeze packages on anaconda.org

请注意,pyzo 组织的下载量遥遥领先,因此你可能选择使用他们的包。如果是这样,你可以通过在命令行中指定它来添加他们组织的通道

$ conda create -c pyzo -n cxfreeze_py34 cx_freeze python=3.4
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ..........
Solving package specifications: .........

Package plan for installation in environment /Users/username/anaconda/envs/cxfreeze_py34:

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    cx_freeze-4.3.3            |           py34_4         1.8 MB
    setuptools-20.7.0          |           py34_0         459 KB
    ------------------------------------------------------------
                                           Total:         2.3 MB

The following NEW packages will be INSTALLED:

    cx_freeze:  4.3.3-py34_4
    openssl:    1.0.2h-0
    pip:        8.1.1-py34_1
    python:     3.4.4-0
    readline:   6.2-2
    setuptools: 20.7.0-py34_0
    sqlite:     3.9.2-0
    tk:         8.5.18-0
    wheel:      0.29.0-py34_0
    xz:         5.0.5-1
    zlib:       1.2.8-0

现在,你已经创建了一个使用 Python 3.4 和 cx_freeze 的软件环境沙箱。

Conda 自动升级到不需要的版本 #

在为应用程序制作 Python 包时,你从一个名为 req.txt 的文件创建应用程序的环境,该文件设置了某个版本,例如 python=2.7.9。但是,当你 conda install 你的包时,它会自动升级到更高版本,例如 2.7.10

原因 #

如果你使用 conda-build 为应用程序制作 conda 包,你可以使用特定的版本号设置依赖项。那些说 - python 的需求行可以改为 - python ==2.7.9。重要的是,在 == 运算符之前有一个空格,之后没有空格。

解决方案 #

在编写版本要求时要谨慎。

Conda 升级错误 #

原因 #

将 conda 从 4.6.1 降级到 4.5.x,然后尝试 conda install condaconda upgrade conda 会产生类似以下的解决和升级错误

Solving environment: failed
CondaUpgradeError: This environment has previously been operated on by a conda version that's newer than the conda currently being used. A newer version of conda is required.
target environment location: /opt/conda
current conda version: 4.5.9
minimum conda version: 4.6

解决方案 #

更改 .condarc 文件。通过直接编辑 .condarc 文件来设置参数:在 conda 版本 4.5.12 中使用 allow_conda_downgrades: true。这将允许你升级。如果你使用的版本早于 4.5.12,请从包缓存中重新安装 conda 4.6.1。

示例:如果我的 conda 信息显示包缓存:/opt/conda/pkgs 且我的 Python 版本为 3.7,那么在命令行中输入 conda install /opt/conda/pkgs/conda-4.6.1-py37_0.tar.bz2 来解决问题。

ValidationError: Invalid value for timestamp #

原因 #

当使用 conda 4.3.28 安装某些包,然后将 conda 降级到 4.3.27 或更早版本时,就会出现这种情况。

解决方案 #

请参见 conda/conda#6096

安装 Python 2 后出现 Unicode 错误 #

示例:UnicodeDecodeError: 'ascii' codec can't decode byte 0xd3 in position 1: ordinal not in range(128)

原因 #

Python 2 无法正确处理 unicode,尤其是在 Windows 上。在这种情况下,如果你的 PATH 环境变量中的任何字符包含任何非 ASCII 字符,你就会看到此异常。

解决方案 #

从 PATH 中删除所有非 ASCII 字符,或切换到 Python 3。

Windows 环境未被激活 #

原因 #

如果你没有激活你的环境,你可能会收到警告信息

Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation

解决方案 #

如果你收到此警告,你需要激活你的环境。为了在 Windows 上通过 PowerShell 或命令提示符在终端上做到这一点,请运行:call <your anaconda/miniconda install location>\Scripts\activate base

系统找不到指定的路径(Windows) #

原因 #

PATH 不包含所有必需的 conda 目录的条目。PATH 可能包含来自第三方软件的太多条目,这些条目在安装时将自己添加到 PATH,即使用户不需要通过 PATH 查找来运行该软件。

解决方案 #

将 PATH 缩减为较少的条目,并激活你的环境。

如果有一些软件需要在 PATH 上找到(你通过 CLI 运行它),我们建议你创建自己的批处理文件,以便在控制台会话中动态设置 PATH,而不是永久修改系统设置中的 PATH。

例如,一个新的conda提示符批处理文件,它首先清除PATH,然后调用正确的激活过程,可能如下所示

set
PATH=”%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;<3rd-party-entries>”
call “<miniconda/anaconda root>\Scripts\activate”

如果您需要从这个自定义的conda提示符中运行第三方软件(除Windows内置软件和Anaconda以外的软件),那么您应该将这些条目(并且只有那些严格必要的条目)添加到上面的set PATH条目中。请注意,只有包裹整个表达式的引号应该存在。这就是批处理脚本中正确设置变量的方式,并且这些引号可以处理PATH中任何条目中的空格。在分配给PATH的值中不应该有额外的引号。

为了使第三方软件优先于conda提供的同名程序,请在激活conda之后将其添加到PATH

set
“PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\”
call “<miniconda/anaconda root>\Scripts\activate”
set “PATH=<3rd-party-entries>;%PATH%”

为了使conda软件优先,请最后调用激活脚本。由于激活会将conda环境PATH条目添加到前面,因此它们具有优先级。

set
PATH=”%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;<3rd-party-entries>”
call “<miniconda/anaconda root>\Scripts\activate”