#c# #ironpython
#c# #ironpython
Вопрос:
Короткая версия заключается в том, что это, похоже, не проблема с кодом (хотя, если у кого-нибудь есть программный обходной путь, который позволяет мне сохранить структуру дизайна, это тоже сработало бы). Когда я пытаюсь импортировать какой-либо модуль при определенных обстоятельствах, он не работает должным образом.
import sys
sys.path.append('C:Python26Lib')
sys.path.append('C:Users<user>DocumentsVisual Studio 2010Projects<Solution>Simulation')
import time # errors out
from XMLRPCBridge.python_ClientAPI.AsyncXMLRPCClient import AsyncXMLRPCClient, RPCPriority # if I remove the previous line this one errors instead
файл Python загружается с использованием следующего
public class StateSimBridge
{
private ScriptScope pythonModule = Python.CreateRuntime().UseFile("..\..\..\Simulation\AsyncClientPatch.py");
// errors out before getting any farther than this
...
}
когда я создаю экземпляр класса из фиктивного основного потока в проекте, все это работает нормально
Однако, когда я загружаю его косвенно из другого проекта, я получаю ошибки об ошибках «нет такого модуля».
public sealed class SimulationDriver
{
private static readonly Lazy<SimulationDriver> lazy = new Lazy<SimulationDriver>(() => new SimulationDriver());
private StateSimBridge.StateSimBridge simulationBridge = new StateSimBridge.StateSimBridge("Garmsir");
static SimulationDriver()
{
}
private SimulationDriver()
{
}
public static SimulationDriver Instance
{
get { return lazy.Value; }
}
...
}
Я даже не уверен, что еще нужно протестировать на этом этапе, поэтому любая помощь приветствуется.
Редактировать: чтобы было ясно, я проверил sys.path в обоих случаях, и обе записи были успешно добавлены. Что меня смущает, так это то, что между этими двумя обстоятельствами будет разница в том, что касается IronPython.
Ответ №1:
Это может быть ошибкой C-P, но я уверен, что
sys.path.append('C:Python26Lib')
sys.path.append('C:Users<user>DocumentsVisual Studio 2010Projects<Solution>Simulation')
это ваша проблема. В Python (например, C, C # и т. Д.) » является управляющим символом. Попробуйте изменить его на (обратите внимание на r!)
sys.path.append(r'C:Python26Lib')
sys.path.append(r'C:Users<user>DocumentsVisual Studio 2010Projects<Solution>Simulation')
и посмотрите, работает ли это. Простой
print sys.path
также может отображаться, действительно ли пути правильные.
Комментарии:
1. Ввод приветствуется, и я попробовал это просто для уверенности (не имело значения). Но, как я уже упоминал, он отлично работает при запуске под IronPython при одних обстоятельствах, но не при других. Он также отлично работает при запуске как чистый Python. Я также пробовал печатать путь в обоих случаях, и они получаются одинаковыми. Оба раза они также по-прежнему выходят с добавлением соответствующих путей.
Ответ №2:
Проблема оказалась в том, что IronPython распределен по двум библиотечным файлам (IronPython.dll и IronPython.Modules.dll ). Тесты, которые я запускал в проекте, работали нормально, но в других проектах это не сработало, потому что (по какой-либо причине) процесс сборки импортировал только IronPython.dll, а не библиотека модулей.