Ответ 1
Я думаю, что он не смог найти файл, потому что он не знает, где его искать, см. здесь для подробного объяснения того, как как работают функции clr.AddReference...().
Я создал dll с помощью С#. Как использовать DLL в IronPython. Я попытался добавить dll, используя clr.AddReference( "yxz.dll" ). Но это терпит неудачу. Я попытался разместить dll в каталоге выполнения IronPython script. Тем не менее он не заявляет, что "Имя xyz не может быть найдено" при попытке ссылаться на dll.
Я думаю, что он не смог найти файл, потому что он не знает, где его искать, см. здесь для подробного объяснения того, как как работают функции clr.AddReference...().
import clr
clr.AddReferenceToFileAndPath(r"C:\Folder\Subfolder\file.dll")
- самый простой способ, предложенный Джеффом в комментариях. Это также работает:
import clr
import sys
sys.path.append(r"C:\Folder\Subfolder") # path of dll
clr.AddReference ("Ipytest.dll") # the dll
import TestNamspace # import namespace from Ipytest.dll
Пример создания .NET-классов с помощью приложения IronPython создает сборку (которая впоследствии сохраняется на диске как "DynamicAsm.dll" ), Он содержит класс под названием "DynamicType
" с одним статическим методом, называемым "test
". Этот метод принимает четыре целых числа и добавляет их вместе.
Приятно то, что это сохраняет "DynamicAsm.dll" на диск. Затем вы можете запустить сеанс интерактивного интерпретатора IronPython и сделать следующее:
>>> import clr
>>> clr.AddReference('DynamicAsm.dll')
>>> import DynamicType
>>> DynamicType.test(2, 3, 4, 5)
14
Обратите внимание, что пример использует имя класса в инструкции import
.
Вы можете использовать это:
import clr
clr.AddReferenceToFile("yxz.dll")
Лучше использовать clr.AddReferenceToFile(имя файла), потому что он принимает относительный путь.
import clr
clr.AddReferenceToFile("xxx.dll")
Затем вы можете импортировать классы путем импорта, как обычно:
import xxx
или
from xxx import *
Я рекомендую вам ознакомиться с этой книгой, это очень полезно. https://play.google.com/store/apps/details?id=com.gavin.gbook
Я получил это поведение только с консоли IronPython. Когда я запускаю script, это нормально. Когда я запускаю script IronPython, sys.path содержит абсолютный путь к моему текущему рабочему каталогу, так что он работает. Когда я вхожу в консоль, sys.path включает только '.' для текущего рабочего каталога. Это может объяснить разницу в поведении.
Как немного хакерское решение, я создал файл fixpath.py
"""This hacky script fixes the sys.path when I run the ipy console."""
import sys
import os
sys.path.insert(0, os.getcwd())
del sys
del os
Затем я установил переменную среды IRONPYTHONSTARTUP с абсолютным путем к этому файлу. Затем, когда я запускаю консоль IronPython, этот script запускается, а мой sys.path
содержит абсолютную ссылку на мой текущий рабочий каталог и последующие вызовы clr.AddReference
работают правильно.