Python for .NET 사용법

2019.11.02 21:30

졸리운_곰 조회 수:84

Python for .NET 사용법

위의 사이트에서 찾아가면서 관련 정보를 찾아보면 된다.

개발환경

Windows 10

Anaconda 2019.03

--관리자 권한으로 설치함

-- PYTHONHOME = "C:\Anaconda3"

Visual Studio 2017

Python for .NET 설치

Anaconda prompt상에서 다음 명령으로 pythonnet의 master branch에 있는 최신 버전으로 설치한다. 현 시점의 설치버전은2.4.1.dev0

pip install git+https://github.com/pythonnet/pythonnet

아래의 명령으로 설치해서는 안된다. 이유는 너무 예전버전(2.3.0)이 설치되어 홈페이지의 예제들이 동작하지 않고 버그도 많다.

conda install -c pythonnet pythonnet

2.3.0 확인된 버그:

- numpy를 이용하는 python module을 import할 때 error발생

- PyScope 가 동작하지 않는다.

Embedding Python

고수준에서 볼 때 Python을 C# 앱에 embed하기 위해서는 다음의 일들이 필요하다.

Set solution property to x64 by using configuration manager

(내 PC의 경우는 Win10 64bit이므로 x64를 이용, 타경우는 적절히)

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

Reference Python.Runtime.dll in your build environment

Call PythonEngine.Intialize() to initialize Python

Call PythonEngine.ImportModule(name) to import a module

Python언어 자체가 thread safe하지 않으므로 python을 C#에 embed하는 경우는 GIL (Global Interpreter Lock)이란 기능을 이용해야한다. 이 기능은 기본적으로 C#내에서 python을 사용하기 전에 PythonEngine.AcquireLock 에 명령을 이용해서 Lock을 걸어 준후 python 을 이용하다가, 모든 사용이 끝나면 PythonEngine.ReleaseLock 명령을 이용해서 풀어 주어야 한다.

이 기능한 한번에 해주는 것이 다음과 같이 Py.GIL()을 이용하면 된다.

using (Py.GIL()) { PythonEngine.Exec("doStuff()"); }

Visual Studio 2017에서 Python embed 해보기

이전 섹션에서도 언급되었듯이 Embedding Python을 위해서는 가장 먼저 해야하는 일이 "Set solution property to x64 by using configuration manager" 이다. 다음 그림과 같이 솔루션 속성의 "구성관리자" 이를 이용해서 x64 플랫폼 구성을 추가한다.

다음에 해야하는 일은 "Reference Python.Runtime.dll in your build environment" 이다. 개발 환경에서 anaconda3의 기본 설치위치가 "C:\Anaconda3"이며, Python.Runtime.dll는 "C:\Anaconda3\Lib\site-packages"에 위치한다.

다음 그림과 같이 참조관리자의 찾아보기 기능을 이용해서 Python.Runtime.dll을 참조해준다.

python for .net 의 README.rst의 내용에 있는예제를 그냥 이용해서는 실행이 안되므로 다음의 코드와 같이 Path환경을 설정해 주어야 제대로 실행이 된다.

* 추가적인 팁으로 자신의 custom 코드를 실행하기 위해서는 Py.GIL()실행 내부에서 sys.path에 실행하고자 하는 custom 코드가 있는 경로를 추가하면 된다.

using System; using System.Collections.Generic; using Python.Runtime; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var pythonPath = @"C:\Anaconda3"; Environment.SetEnvironmentVariable("PATH", $@"{pythonPath};" + Environment.GetEnvironmentVariable("PATH")); Environment.SetEnvironmentVariable("PYTHONHOME", pythonPath); Environment.SetEnvironmentVariable("PYTHONPATH ", $@"{pythonPath}\Lib"); PythonEngine.PythonHome = @"C:\Anaconda3"; 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(); } } } }

 

 

 

 

[출처] https://blog.naver.com/oldfark/221559498594

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
838 Putty - multi hop 터널링 사용 file 졸리운_곰 2019.11.06 70
837 [PUTTY] 터널링 SSH 포트포워딩 하는 방법 file 졸리운_곰 2019.11.06 233
836 소스 코드 관리와 git file 졸리운_곰 2019.11.03 146
835 Python for .NET 소개 및 사용법 졸리운_곰 2019.11.02 175
» Python for .NET 사용법 file 졸리운_곰 2019.11.02 84
833 Python.NET 사용해보기 졸리운_곰 2019.11.02 458
832 [Programming] Visual Studio Code 소스코드 정렬 단축키 file 졸리운_곰 2019.10.31 100
831 윈도우10에서 펄,perl 다운로드 및 설치후 버전 확인 까지 해보기 file 졸리운_곰 2019.10.24 216
830 파일 탐색기에서 명령 프롬프트 호출하기 file 졸리운_곰 2019.10.06 103
829 윈도우 10, 새로운 키보드 단축키 공개 file 졸리운_곰 2019.10.06 101
828 나의 Sparx Enterprise Architect(UML) 활용기 file 졸리운_곰 2019.09.29 161
827 델, 2019년 기술 트렌드 6대 전망 발표 file 졸리운_곰 2019.09.25 119
826 디지털 기록 도구 : 워크플로위(workflowy) 사용법 개론 file 졸리운_곰 2019.06.23 149
825 워크플로위(WorkFlowy) 하나로 할일관리와 메모를 모두 해결하기 file 졸리운_곰 2019.06.23 884
824 워크플로위(Workflowy) 사용법 총정리 file 졸리운_곰 2019.06.23 174
823 blockchain-logistics-DHL-glo-core-blockchain-trend-report.pdf file 졸리운_곰 2019.06.23 145
822 B4J Download file 졸리운_곰 2019.06.22 91
821 교수법 안내 - 성신여대 자료 file 졸리운_곰 2019.06.09 120
820 블록체인을 활용하는 10가지 방법 file 졸리운_곰 2019.06.06 98
819 [파트너스] 성공적인 프로젝트 진행을 위해 반드시 지켜야 할 3가지 file 졸리운_곰 2019.05.11 114
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED