2011-06-13 18 views
8

Używam systemu Windows 7, 64-bitowego. Udało mi się pobrać i zainstalować pythonnet, więcUżywanie złożeń C# z Pythona za pomocą pythonneta

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

działa poprawnie. Pobrałem i skompilowałem/uruchomiłem aplikację C#, która tworzy wiele złożeń. Wniosek dotyczy ARDrone-Control-.NET.

Jak mogę użyć wygenerowanych plików DLL z Pythona (a nie tylko z wbudowanych klas C#).

Ponieważ nigdy nie używałem C# (dlatego chcę korzystać z biblioteki z Pythona), z przyjemnością wyjaśnię to pytanie.

+1

Wygląda na to, że dostajesz dużo niepotrzebnego tarcia. Czy rozważałeś po prostu użycie Żelaznego Pythona do tego projektu? –

+0

IronPython jest dość stabilny, ale programowanie stało się bardzo powolne po otwarciu przez MS. CPython jest bardzo stabilny i ma potężne API C, używane przez numpy, Cython, pandy, itp. – denfromufa

Odpowiedz

3

Z tego, co gromadzę próbujesz załadować zewnętrzny zestaw w Python.Net, zrobiłem małą pracę z tą biblioteką. należy rozważyć użycie IronPython zamiast ale stosując Python.Net można załadować montaż poprzez odbicie .NET niczym tego

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 niestety nie jest opcją, ponieważ mnóstwo innych pakietów rozszerzeń działa tylko z CPython. – Petter

+0

Podany przykład powinien działać z python.net – mitchellsg

+0

OK, dziękuję! 1.2.3.4. – Petter

11

Wystarczy dostarczyć inną metodę:

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

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

MyClass.does_something() 

zakłada to, że w folderze C:\Path\to\your\assemblies ty mieć plik MyAssembly.dll.

Więc "sztuczka" polega na tym, że musisz dodać folder złożeń do sys.path przed clr.AddReference.

+0

Musiałem dodać katalog złożenia do sys.path zanim zaimportowałem clr. Nie wiem, czy to ostatnie, czy anomalia z moją maszyną - ale jeśli jest to ważne, być może powinno to być tutaj odnotowane. – Tritium21