pythonet 써보기 위해서 선행 설치할 것들을 모두 설치를 완료했습니다. (python 3.8.3, anaconda3)
참고로 python은 하나도 모릅니다. KoNLPy: 파이썬 한국어 NLP — KoNLPy 0.6.0 documentation 여기에 있는 데이터를 C#에서 사용하고 싶어서 이걸하고 있습니다.
pythonnet의 대문에 있는 예제소스를 보면 사용하기 전에
Embedding Python in .NET
- You must set Runtime.PythonDLL property or PYTHONNET_PYDLL environment variable starting with version 3.0, otherwise you will receive TypeInitializationException. Typical values are python38.dll (Windows), libpython3.8.dylib (Mac), libpython3.8.so (most other *nix).
- All calls to python should be inside a
using (Py.GIL()) {/* Your code here */}
block.- Import python modules using
dynamic mod = Py.Import("mod")
, then you can call functions as normal, egmod.func(args)
.- Use
mod.func(args, Py.kw("keywordargname", keywordargvalue))
ormod.func(args, keywordargname: keywordargvalue)
to apply keyword arguments.- All python objects should be declared as
dynamic
type.- Mathematical operations involving python and literal/managed types must have the python object first, eg.
np.pi * 2
works,2 * np.pi
doesn’t.
이라고 하면서 어떤 값을 설정하라고 하는데요. 찾아보니 그 방법이 아래와 같은 코드인 것 같습니다.
class Program
{
static void Main(string[] args)
{
void AddEnvPath(params string[] paths)
{
// PC에 설정되어 있는 환경 변수를 가져온다.
List<string> envPaths = Environment.GetEnvironmentVariable("PATH").Split(Path.PathSeparator).ToList();
// 중복 환경 변수가 없으면 list에 넣는다.
envPaths.InsertRange(0, paths.Where(x => x.Length > 0 && !envPaths.Contains(x)).ToArray());
// 환경 변수를 재설정
Environment.SetEnvironmentVariable("PATH", string.Join(Path.PathSeparator.ToString(), envPaths), EnvironmentVariableTarget.Process);
}
string pythonPath = @"C:\Users\user\anaconda3";
string PYTHON_HOME = Environment.ExpandEnvironmentVariables(pythonPath);
AddEnvPath(PYTHON_HOME, Path.Combine(PYTHON_HOME, @"Library\bin"));
PythonEngine.PythonHome = PYTHON_HOME;
//PythonEngine.PythonPath = @"C:\\Python38\\python.exe";
PythonEngine.PythonPath = string.Join(Path.PathSeparator.ToString(), new string[] { PythonEngine.PythonPath });
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
dynamic sin = np.sin;
Console.WriteLine(sin(5));
double c = np.cos(5) + sin(5);
Console.WriteLine(c);
dynamic a = np.array(new List<float> { 1, 2, 3 });
Console.WriteLine(a.dtype);
dynamic b = np.array(new List<float> { 6, 5, 4 }, dtype: np.int32);
Console.WriteLine(b.dtype);
Console.WriteLine(a * b);
Console.ReadKey();
}
}
}
소스는 명월 일지 :: [C#] Python을 사용하기 위한 방법(pythonnet) 여기에서 참조했습니다.
하지만 환경변수를 세팅하는 부분이 동작하지 않네요…
왜 이런걸까요…?