2011-06-13 3 views
8

Я использую Windows 7, 64-разрядный. Мне удалось загрузить и установить pythonnet, поэтомуИспользование C# сборок из Python через pythonnet

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

работает нормально. Я также загрузил и скомпилировал/запустил приложение C#, которое создает множество сборок. Это приложение ARDrone-Control-.NET.

Как я могу использовать сгенерированные файлы DLL из Python (а не только встроенные классы C#).

Поскольку я никогда не использовал C# (именно поэтому я хочу использовать библиотеку из Python), я был бы рад прояснить вопрос.

+1

Кажется, что вы получаете много ненужных трений. Рассматривали ли вы просто использование Iron Python для этого проекта? –

+0

IronPython довольно стабилен, но разработка стала очень медленной, как только открыта MS. CPython очень стабилен и имеет мощный C API, используемый numpy, Cython, pandas и т. Д. – denfromufa

ответ

3

Из того, что я собираю, вы пытаетесь загрузить внешнюю сборку в Python.Net, я немного поработал с этой библиотекой. Вы должны рассмотреть возможность использования IronPython, но вместо этого с помощью Python.Net вы можете загрузить сборку с помощью отражения .NET как этого

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

Просто предоставить другой метод:

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

Мне пришлось добавить каталог сборки в sys.path, прежде чем импортировать clr. Я не знаю, было ли это последнее, или аномалия с моей машиной, - но если это важно, следует отметить здесь. – Tritium21