2011-06-13 12 views
8

Utilizzo Windows 7, 64 bit. Sono riuscito a scaricare e installare pythonnet, quindiUtilizzo di assembly C# da Python tramite pythonnet

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

funziona correttamente. Ho anche scaricato e compilato/eseguito un'applicazione C# che crea molti assembly. L'applicazione in questione è ARDrone-Control-.NET.

Come posso utilizzare i file DLL generati da Python (e non solo le classi C# integrate).

Dato che non ho mai usato C# (che è il motivo per cui voglio usare la libreria di Python), sarei felice di chiarire la domanda.

+1

Sembra che tu stia ricevendo un sacco di inutili attriti. Hai considerato semplicemente l'utilizzo di Iron Python per questo progetto? –

+0

IronPython è abbastanza stabile, ma lo sviluppo è diventato molto lento una volta aperto da MS. CPython è molto stabile e ha una potente API C, usata da numpy, Cython, panda, ecc. – denfromufa

risposta

3

Da quello che ho trovato si sta tentando di caricare un assembly esterno in Python.Net, ho fatto poco lavoro con quella libreria. Si dovrebbe considerare l'utilizzo di IronPython, invece, ma utilizzando Python.Net si poteva caricare l'assembly attraverso la riflessione del Net come questo

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 non è purtroppo un'opzione, dal momento che molti altri pacchetti di estensione funzionano solo con CPython. – Petter

+0

L'esempio fornito dovrebbe funzionare con python.net – mitchellsg

+0

OK, grazie! 1.2.3.4. – Petter

11

Solo per fornire un altro metodo:

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

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

MyClass.does_something() 

Questo presuppone che nella cartella C:\Path\to\your\assemblies voi avere un file MyAssembly.dll.

Quindi il "trucco" è che è necessario aggiungere la cartella dei gruppi a sys.path prima di clr.AddReference.

+0

Ho dovuto aggiungere la directory assembly a sys.path prima di importare clr. Non so se sia recente, o un'anomalia con la mia macchina - ma se è importante, dovrebbe forse essere notato qui. – Tritium21