2009-07-29 34 views
6

Necesito portar un código que depende en gran medida de lxml desde una aplicación CPython a IronPython.¿Cómo hacer que lxml funcione en IronPython?

lxml es muy Pythonic y me gustaría seguir usándolo en IronPython, pero depende de libxslt y libxml2, que son extensiones C.

¿Alguien sabe de una solución para permitir lxml en IronPython o una versión de lxml que no tiene esas dependencias de extensión C?

Respuesta

1

Algo que es posible que ya se haya considerado:

Una alternativa es el primer puerto de la biblioteca lxml API y luego su código (dependiendo del tamaño del código). Puede que tenga que escribir algunos wrappers de C# para las llamadas C nativas a las extensiones C. No estoy seguro de qué problemas, si es que hay alguno, están involucrados en esto con respecto a IPy.

O si el código que está portando es pequeño, en comparación con lxml, entonces quizás solo pueda eliminar la dependencia lxml y usar las bibliotecas .NET XML.

+1

Gracias por esa información, en este momento estamos considerando seriamente deshacernos de lxml y elegir .Net XML porque simplemente no podemos usar C-extensions en absoluto. –

2

Puede consultar IronClad, que es un proyecto de código abierto destinado a hacer que C Extensions for Python esté disponible en IronPython.

+0

Gracias por su respuesta y su tiempo, desearía poder utilizar IronClad y probablemente funcione en la mayoría de los casos. Desafortunadamente, mi código se ejecutará como un script de IronPython incrustado dentro de un servidor de ASP.net y no puedo usar ninguna extensión nativa, incluso si pudiera acceder a ellos. –

+0

No soy un experimentado desarrollador de IronPython o Python; Soy un desarrollador de .Net que tiene pasatiempos en IronPython. Perdóname la ignorancia aquí. Parece que lxml es una API bastante rica, por lo que será difícil de replicar. Una idea que tuve fue tratar de replicar esas partes de la API lxml que está utilizando actualmente. Puede ver un proyecto como http://devhawk.net/2008/05/06/Stream+Processing+XML+In+IronPython.aspx para obtener un punto de partida. –

Cuestiones relacionadas