环境:
我正在通过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");
很好。
想知道这里的问题是什么以及如何解决这个问题,谢谢。
答案 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)。