2011-06-13 10 views
8

Windows 7, 64 비트를 사용하고 있습니다. 나는 pythonnet을 다운로드하여 설치 했으므로,Python에서 Pythonnet을 통해 C# 어셈블리 사용

import clr 
clr.AddReference("System.Windows.Forms") 
from System.Windows.Forms import Form 

이 유효합니다. 또한 많은 어셈블리를 만드는 C# 응용 프로그램을 다운로드하고 컴파일/실행했습니다. 해당 응용 프로그램은 ARDrone-Control-.NET입니다.

어떻게 생성 된 DLL 파일을 파이썬에서 사용할 수 있습니까? (뿐만 아니라 빌트인 C# 클래스도).

저는 C#을 사용한 적이 없으므로 (이 때문에 파이썬의 라이브러리를 사용하고 싶습니다), 질문을 명확히 해 드리겠습니다.

+1

불필요한 마찰이 많은 것처럼 보입니다. 이 프로젝트에 단순히 Iron Python을 사용 해본 적이 있습니까? –

+0

IronPython은 꽤 안정적이지만 일단 MS에 의해 오픈 소스가되면 개발이 매우 느려집니다. CPython은 매우 안정적이며 numpy, Cython, pandas 등에서 사용되는 강력한 C API를 가지고 있습니다. – denfromufa

답변

3

내가 수집 한 것부터 파이썬 닷넷에서 외부 어셈블리를로드하려고하는데, 나는 그 라이브러리로 거의 작업하지 않았다. 당신은 그냥 다른 방법을 제공하기 위해이

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import clr 
>>> from System.Reflection import Assembly 
>>> dll1 = Assembly.LoadFile("C:\Python\Python27-32\Lib\site-packages\Python.Runtime.dll") 
>>> clr.Python.Runtime 
<module 'Python.Runtime'> 
>>> clr.Python.Runtime.PythonEngine 
<class 'Python.Runtime.PythonEngine'> 
+1

IronPython은 불행히도 CPython과 만 작동하는 다른 확장 패키지가 있기 때문에 옵션이 아닙니다. – Petter

+0

제공된 예제는 python.net과 작동해야합니다 – mitchellsg

+0

좋습니다, 감사합니다! 1.2.3.4. – Petter

11

처럼 닷넷의 반사를 통해 어셈블리를로드 할 수 Python.Net 대신 IronPython의를 사용하고 있지만 사용을 고려해야합니다 :

import sys 
sys.path.append("C:\Path\to\your\assemblies") 

clr.AddReference('MyAssembly') 
from MyAssembly import MyClass 

MyClass.does_something() 

이 가정을 그 C:\Path\to\your\assemblies 폴더에있는 당신 MyAssembly.dll 파일이 있어야합니다.

그래서 '트릭'이란 sys.path에 어셈블리 폴더를 추가해야합니다 (clr.AddReference).

+0

clr을 가져 오기 전에 어셈블리 디렉토리를 sys.path에 추가해야했습니다. 최근인지, 아니면 컴퓨터의 이상인지는 모르겠지만 중요하다면 여기에 기록해야합니다. – Tritium21

관련 문제