Pergunta

Estou hospedando Python em um aplicativo SL. Basicamente, tenho uma propriedade anexada que permite passar pelo script Python, que é executado no evento de foco perdido do elemento.

A integração do IPY funciona bem, desde que eu não precise de nenhuma importação de terceiros. Eu copiei o pacote de formancode para a pasta Site-Packages em Arquivos de Programas Iron Python ... e depois tentei importar o FormEncode ambos programaticamente usando o scriptEngine.importModule e o Inline. Em cada caso, o módulo não é encontrado.

Meu código de configuração para o host DLR é o seguinte:

        var setup = new ScriptRuntimeSetup();
        setup.HostType = typeof(BrowserScriptHost);
        setup.LanguageSetups.Add(Python.CreateLanguageSetup(null));
        setup.Options["SearchPaths"] = new string[] { string.Empty };

        _runtime = new ScriptRuntime(setup);
        _engine = _runtime.GetEngine("Python");
        _scope = _engine.CreateScope();
        _engine.ImportModule("formencode");

Qualquer ajuda seria apreciada.

Foi útil?

Solução

O código de hospedagem DLR que você tem parece bom, mas onde você coloca o FormEncode está errado:

Eu copiei o pacote de formancode para a pasta de pacotes de sites em Arquivos de Programas Iron Python

a setup.HostType = typeof(BrowserScriptHost) A linha faz com que o IronPython procure no arquivo XAP para todas as operações do sistema de arquivo, incluindo "importação". Você precisará copiar o FormEncode.py no projeto Silverlight do seu host e verifique se "Copy Local" está definido como "True", para que chegue ao XAP. Em seguida, importá -lo funcionará.

Isso é esperado porque o Silverlight não pode ler em qualquer local no sistema de arquivos do seu sistema operacional, pois precisa funcionar na máquina de todos :)

Outras dicas

Não tentei fazer exatamente isso, mas achei isso para incluir as assembléias de terceiros (mecanismo de física do Farseer no meu caso), tive que incluir a assembléia no XAP e fazer referência ao app.Manifest.

Mas o que realmente me pegou foi que eu tinha que fazer referência à assembléia com seu nome forte (o que eu só tinha que fazer no SL, localmente, eu poderia usar o nome da montagem).

Espero que isso ajude e eu esteja interessado em ver como você acaba resolvendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top