无法添加 python.dll 作为对 Visual Studio 项目的引用
Can not add python.dll as reference to Visual Studio project
我正在使用 Visual Studio 在 C# 中创建一个应用程序,它将 运行 一些 Python-脚本并获取它们的 return 值。为此,我想使用 Python.Net(或 Python 用于 .Net)。我通过 anaconda 安装了 Python.Net。
但是,如果我 运行 程序,我会收到 python36.dll 未找到的错误:
System.DllNotFoundException: Unable to load DLL 'python36':
The specified module could not be found
如果我想加载 anaconde 的 python36.dll 作为我项目的参考,我得到:
Reference "C:\Programm Files (x86\Micrtosoft\Visual Studio\Shared\Anaconde3_64\python36.dll" can't be
added, Please make sure that the file is accessible and that it is
a valid assembly or COM component.
我试图用以下方法注册 dll:
regsvr32
也没用。
根据this post,
该文件是本机 DLL,这意味着您无法通过添加引用将其添加到 .NET 项目中...您可以通过 DllImport 使用它
看,
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx
示例 -DllImportAttribute 属性导入 Win32 MessageBox 函数。
using System;
using System.Runtime.InteropServices;
class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
终于找到一个solution/workaround。这个错误似乎是 Python.Net 更常见的问题,他们在 github 网站上已经解决了一些问题 (https://github.com/pythonnet/pythonnet/issues/708)
var pythonPath = @"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python3_64";
Environment.SetEnvironmentVariable("PATH", $@"{pythonPath};" + Environment.GetEnvironmentVariable("PATH"));
Environment.SetEnvironmentVariable("PYTHONHOME", pythonPath);
Environment.SetEnvironmentVariable("PYTHONPATH ", $@"{pythonPath}\Lib");
PythonEngine.PythonHome = @"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64";
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
}
我正在使用 Visual Studio 在 C# 中创建一个应用程序,它将 运行 一些 Python-脚本并获取它们的 return 值。为此,我想使用 Python.Net(或 Python 用于 .Net)。我通过 anaconda 安装了 Python.Net。
但是,如果我 运行 程序,我会收到 python36.dll 未找到的错误:
System.DllNotFoundException: Unable to load DLL 'python36':
The specified module could not be found
如果我想加载 anaconde 的 python36.dll 作为我项目的参考,我得到:
Reference "C:\Programm Files (x86\Micrtosoft\Visual Studio\Shared\Anaconde3_64\python36.dll" can't be
added, Please make sure that the file is accessible and that it is
a valid assembly or COM component.
我试图用以下方法注册 dll:
regsvr32
也没用。
根据this post,
该文件是本机 DLL,这意味着您无法通过添加引用将其添加到 .NET 项目中...您可以通过 DllImport 使用它 看, http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx
示例 -DllImportAttribute 属性导入 Win32 MessageBox 函数。
using System;
using System.Runtime.InteropServices;
class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
终于找到一个solution/workaround。这个错误似乎是 Python.Net 更常见的问题,他们在 github 网站上已经解决了一些问题 (https://github.com/pythonnet/pythonnet/issues/708)
var pythonPath = @"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python3_64";
Environment.SetEnvironmentVariable("PATH", $@"{pythonPath};" + Environment.GetEnvironmentVariable("PATH"));
Environment.SetEnvironmentVariable("PYTHONHOME", pythonPath);
Environment.SetEnvironmentVariable("PYTHONPATH ", $@"{pythonPath}\Lib");
PythonEngine.PythonHome = @"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64";
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
}