Использование сборок C # из Python через pythonnet

#python #.net #python.net

#python #.net #python.net

Вопрос:

Я использую 64-разрядную версию Windows 7. Мне удалось загрузить и установить 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 для этого проекта?

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

Ответ №1:

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

 import sys
sys.path.append("C:Pathtoyourassemblies")

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

MyClass.does_something()
  

Это предполагает, что в C:Pathtoyourassemblies папке у вас есть MyAssembly.dll-файл.

Итак, «хитрость» в том, что вам нужно добавить папку ваших сборок в sys.path before clr.AddReference .

Комментарии:

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

Ответ №2:

Насколько я понимаю, вы пытаетесь загрузить внешнюю сборку на 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:PythonPython27-32Libsite-packagesPython.Runtime.dll")
>>> clr.Python.Runtime
<module 'Python.Runtime'>
>>> clr.Python.Runtime.PythonEngine
<class 'Python.Runtime.PythonEngine'>
  

Комментарии:

1. IronPython, к сожалению, не подходит, поскольку множество других пакетов расширений работают только с CPython.

2. Кроме того, IronPython доступен только в Python 2, а Python 2 устарел в 2020 году