【问题标题】:Import failure when calling Anaconda Python from Windows shell从 Windows shell 调用 Anaconda Python 时导入失败
【发布时间】:2019-11-19 18:27:45
【问题描述】:

我想从 Windows shell 调用我的 Anaconda Python。目标是最终使用系统调用从 MATLAB 调用它,所以我必须使用普通的 Windows shell,而不是“Anaconda 提示符”。

我想运行一个简单的 Python 脚本,但它没有通过 import 语句:

> "C:\ProgramData\Anaconda3\python.exe" lhs.py
Traceback (most recent call last): 
  File "lhs.py", line 8, in <module> 
    import numpy 
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\__init__.py", line 140, in <module> 
    from . import _distributor_init 
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\_distributor_init.py", line 34, in <module> 
    from . import _mklinit 
ImportError: DLL load failed: The specified module could not be found. 

编辑

我做了一个简化的 Python 脚本 (error.py),只包含一行:

import numpy

然后我称它为:

"C:\ProgramData\Anaconda3\python.exe" error.py

【问题讨论】:

  • 你经常使用anaconda环境吗?如果是,这可能是原因:如果您只是调用python.exe lhs.py,您将不会为此安装软件包
  • 但它们已安装。 ImportError 来自 numpy 自己的初始化序列。
  • 我无法重现您的问题。相反,当我像你一样调用它时,anacondy python 可执行文件会告诉我ModuleNotFoundError(并且在 conda env 中使用时有效)。你能提供一种重现的方法吗?

标签: python cmd anaconda


【解决方案1】:

TL;DR

C:\ProgramData\Anaconda3\condabin\activate.bat YOURENVIRONMENTNAME && python N:\Temp\lhs.py

长答案

github上有一个similar issue的报道。我通过搜索您消息的最后几行找到了这一点。大概是这样的:

File "C:\Users\hanna\Anaconda3\lib\site-packages\tensorflow\python_init.py",

第 47 行,在 将 numpy 导入为 np 文件“C:\Users\hanna\Anaconda3\lib\site-packages\numpy_init_.py”,第 140 行,在 从 。导入_distributor_init 文件“C:\Users\hanna\Anaconda3\lib\site-packages\numpy_distributor_init.py”, 第 34 行,在 从 。导入_mklinit

在那里,他们链接到conda troubleshooting page:

这样的错误消息

英特尔 MKL 致命错误:无法加载 mkl_intel_thread.dll

原因
NumPy 无法加载正确的 MKL 或 Intel OpenMP 运行时 图书馆。这几乎总是由以下两种情况之一引起:

  1. 使用 NumPy 的环境尚未激活。

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

如果您没有激活您的环境,请先这样做。


所以让我们先试试这个:

C:\\ProgramData\\Anaconda3\\condabin\\activate.bat
conda run -n yourenvironment C:\\path\\to\\your\\pythonfile\\lhs.py

(是的,来自普通的 cmd 终端)

如果这似乎可行,您应该能够使用&amp;&amp; 链接这两个命令。我自己的例子是这样的:

F:\Programme\Programme\Anaconda3\condabin\activate.bat && conda run -n textrecognition N:\Temp\temp.py

这可以进一步简化为

F:\Programme\Programme\Anaconda3\condabin\activate.bat textrecognition && python N:\Temp\temp.py

如果问题是第二个问题,您可以选择在system32 之前加载 conda 内容。从以下版本开始的 anaconda 支持此功能:

Python 2.7.15 构建 14

Python 3.6.8 构建 7

Python 3.7.2 构建 8

要激活它,您需要将一些环境变量设置为 1:

控制环境变量:

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(Anaconda 例如提示)或 Windows GUI。

命令行界面: https://superuser.com/questions/79612/setting-and-getting-windows-environment-variables-from-the-command-prompt/79614

图形用户界面: http://www.dowdandassociates.com/blog/content/howto-set-an-environment-variable-in-windows-gui/

这些应设置为值 1 以启用它们。例如,在一个 anaconda 提示终端:

set CONDA_DLL_SEARCH_MODIFICATION_ENABLE=1

【讨论】:

  • 我在这里超出了我的深度。新建环境(conda activate myenv)有什么效果?如何选择合适的名称?
  • 回复:“让我们先试试这个”——conda 在常规 cmd shell 中不是可识别的命令。
  • 好的,这很奇怪。我像你说的那样跑了activate.bat。然后我做了conda run lhs.py(省略了环境参数)。它在我的默认文本编辑器中打开 lhs.py,而不是运行它。
  • 呃.. 好吧哈哈。我想在我的答案开始时尝试我的最新编辑,没有 conda run
  • @Ilya Re:“创建新环境有什么效果?”我真的建议您了解更多相关信息,但这超出了这个问题的范围。基本上,环境包含您使用的模块,因此您可以为不同的程序提供不同的版本和组合。这是使用anaconda的主要原因
【解决方案2】:

在调用脚本之前,你需要在 cmd 中激活你的 conda base

call <path>\anaconda\Scripts\activate base
<path>\anaconda\python.exe <path>\scriptname.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2017-07-03
    • 2012-11-22
    • 2014-11-22
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多