IronPython импортирует модули иногда, но не другие - PullRequest
2 голосов
/ 06 октября 2011

Короткая версия заключается в том, что это не является проблемой кода (хотя, если у кого-то есть программный обходной путь, который позволяет мне сохранить структуру проекта, это тоже будет работать). Когда я пытаюсь импортировать какой-либо модуль при определенных обстоятельствах, он не работает должным образом.

import sys
sys.path.append('C:\Python26\Lib')
sys.path.append('C:\Users\<user>\Documents\Visual Studio 2010\Projects\<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 будет разница между этими двумя обстоятельствами.

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Это может быть ошибка C-P, но я уверен, что

sys.path.append('C:\Python26\Lib')
sys.path.append('C:\Users\<user>\Documents\Visual Studio 2010\Projects\<Solution>\Simulation')

это ваша проблема. В Python (например, C, C # и т. Д.) '\' Является escape-символом. Попробуйте изменить его на (обратите внимание на r!)

sys.path.append(r'C:\Python26\Lib')
sys.path.append(r'C:\Users\<user>\Documents\Visual Studio 2010\Projects\<Solution>\Simulation')

и посмотри, работает ли это. Простой

print sys.path

может также показать, правильны ли пути.

0 голосов
/ 18 октября 2011

Проблема оказалась в том, что IronPython распространяется по двум библиотекам (IronPython.dll и IronPython.Modules.dll).Тесты, которые я запускал в проекте, работали нормально, но в других проектах он не работал, потому что (по какой-то причине) процесс сборки выполнял импорт только IronPython.dll, а не библиотеки модулей.

...