Pythonnet + .NET 10 FBA ์กฐํ•ฉํ•˜๊ธฐ

Pythonnet์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ๋ถˆ๋งŒ์ธ ๋ถ€๋ถ„์€ ์•„๋ฌด๋ž˜๋„ ๊ธฐ์กด์˜ C# ์ฝ”๋“œ์™€ ๊ฒฐ์ด ๋งž์ง€ ์•Š๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ FBA ๋•๋ถ„์— ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ์นจ๋ฒ”ํ•˜๊ฑฐ๋‚˜, ํž˜๋“ค๊ฒŒ ํ†ตํ•ฉํ•˜์ง€ ์•Š๊ณ  Python ํŠน์œ ์˜ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์กด์ค‘ํ•˜๋ฉด์„œ ๋…๋ฆฝ๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ์ ์€ ์ •๋ง ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

Python DLL์„ ์ฐพ์•„์ฃผ๋Š” ๋ถ€๋ถ„๋งŒ ์ •ํ™•ํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด Bootstrapper ์ฝ”๋“œ๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ์œ ์šฉํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#:package pythonnet@3.0.5
#:property PublishAot=False

using Python.Runtime;

var versionPostfix = "312";
Runtime.PythonDLL = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
    @$"Programs\Python\Python{versionPostfix}\python{versionPostfix}.dll");
RuntimeData.FormatterType = typeof(NoopFormatter);

try
{
    PythonEngine.Initialize();

    using (var gil = Py.GIL())
    {
        dynamic np = Py.Import("numpy");
        Console.WriteLine(np.cos(np.pi * 2));

        dynamic sin = np.sin;
        Console.WriteLine(sin(5));

        double c = (double)(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);
    }
}
finally
{
    PythonEngine.Shutdown();
}
2 Likes