Anaconda 3中的Pythonnet导入错误Visbrain

时间:2018-08-15 18:28:05

标签: c# importerror python.net

环境:

  • Pythonnet版本:2.3.0,已在Amaconda3中随pip一起安装
  • Python版本:3.6.6与Anaconda一起使用
  • Visual Studio 2017社区
  • 操作系统:Windows 7,64位

我正在通过Pythonnet运行Visbrain模块。 我在Anaconda 3中创建了一个名为py36的虚拟环境。Anaconda3在D驱动器中。 尝试在我的C#程序中运行以下代码。

using (Py.GIL())
{
 dynamic np = Py.Import("visbrain");
}

但是它弹出一个错误

Python.Runtime.PythonException: 'ModuleNotFoundError : No module named 'visbrain''

堆栈跟踪:

Python.Runtime.PythonException
  HResult=0x80131500
  Message=ModuleNotFoundError : No module named 'visbrain'
  Source=Python.Runtime
  StackTrace:

我在Lib \ site-packages下有visbrain。

尝试解决方案但未成功:

1)在环境变量中添加PATH,PYTHONHOME。 路径:D:\ Anaconda3 \ envs \ py36; PYTHONHOME:D:\ Anaconda3 \ envs \ py36;

2)pythonnet Embedding Python in .net example failing to load module 添加了PYTHONPATH:D:\ Anaconda3 \ envs \ py36 \ Lib \ site-packages;

===

奇怪的是,“ numpy”模块也位于Lib \ site-packages中。

当我尝试以下示例时

dynamic np = Py.Import("numpy");

很好。

想知道这里的问题是什么以及如何解决这个问题,谢谢。

2 个答案:

答案 0 :(得分:2)

根据https://github.com/pythonnet/pythonnet/wiki/Troubleshooting-on-Windows,-Linux,-and-OSX

提到

  

“无法加载DLL pythonXX”:未安装CPython   在%PATH%和%PYTHONHOME%环境变量中注册。   或者在初始化之前设置PythonEngine.PythonHome属性   Python运行时。

您可以通过编码来设置它们,而不是手动设置PythonHome和Path。

PythonEngine.Initialize();之前 只是记得要设置PATH和PYTHONHOME,例如

// Modify Path
string path = @"d:\Anaconda3\envs\py36;" + Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine); 

// Set Path
Environment.SetEnvironmentVariable("PATH", path, EnvironmentVariableTarget.Process);

// Set PythonHome
Environment.SetEnvironmentVariable("PYTHONHOME", @"d:\Anaconda3\envs\py36", EnvironmentVariableTarget.Process);

// Set PythonPath
// ONLY SET THIS IF YOU ARE SURE WHAT YOU ARE DOING
Environment.SetEnvironmentVariable("PYTHONPATH", @"d:\Anaconda3\envs\py36\Lib", EnvironmentVariableTarget.Process);

答案 1 :(得分:0)

我在Miniconda上也遇到了类似的问题,显然Python.NET在conda上不能很好地工作。请参见this answer:最好是重新安装python(没有conda)。