2011-06-13 10 views
8

Estoy usando Windows 7 de 64 bits. He logrado descargar e instalar pythonnet, por lo queUso de ensamblajes de C# desde Python a través de pythonnet

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

funciona bien. También descargué y compilé/ejecuté una aplicación C# que crea muchos ensamblajes. La aplicación en cuestión es ARDrone-Control-.NET.

¿Cómo puedo usar los archivos DLL generados de Python (y no solo las clases C# integradas).

Como nunca he usado C# (por lo que deseo usar la biblioteca de Python), me gustaría aclarar la pregunta.

+1

Parece que estás teniendo mucha fricción innecesaria. ¿Has considerado simplemente usar Iron Python para este proyecto? –

+0

IronPython es bastante estable, pero el desarrollo se volvió muy lento una vez abierto por MS. CPython es muy estable y tiene una potente API de C, utilizada por Numpy, Cython, pandas, etc. – denfromufa

Respuesta

3

Por lo que veo que está tratando de cargar un ensamblado externo en Python.Net, he trabajado poco con esa biblioteca. Debe considerar el uso IronPython lugar pero utilizando Python.Net se podría cargar el ensamblado a través de la reflexión de .Net como esto

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 no es una opción desafortunada, ya que muchos otros paquetes de extensión solo funcionan con CPython. – Petter

+0

El ejemplo proporcionado debería funcionar con python.net – mitchellsg

+0

OK, ¡gracias! 1.2.3.4. – Petter

11

sólo para proporcionar otro método:

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

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

MyClass.does_something() 

Esto supone que en la carpeta que C:\Path\to\your\assemblies tener un archivo MyAssembly.dll.

Así que el "truco" es que tiene que agregar su carpeta de ensamblajes al sys.path antes de clr.AddReference.

+0

Tuve que agregar el directorio de ensamblaje a sys.path antes de importar clr. No sé si es reciente, o una anomalía con mi máquina, pero si es importante, tal vez deba señalarse aquí. – Tritium21

Cuestiones relacionadas