Pregunta

Estoy ansioso por beber un poco de lenguaje dinámico moderno koolaid, así que he creído todas las cosas en el blog y podcasts de Michael Foord, compré su libro (y leí algunos), y agregué una IPy incrustada tiempo de ejecución para una gran aplicación existente hace aproximadamente un año (aunque eso fue para otra persona y realmente no la usé yo mismo).

Ahora necesito hacer algunas cosas de generación de código bastante simples, donde voy a invocar algunos métodos en algunos objetos .net (personalizados, objetos C #), crear algunas cadenas, escribir algunos archivos, etc. .

La experiencia de intentar esto me hace sentir como el niño que piensa que es el único que puede ver que el Emperador no tiene ropa puesta. Si está utilizando IronPython, realmente agradecería saber cómo maneja los siguientes aspectos:

  • Edición de código: ¿utiliza el framework .NET sin Intellisense?
  • Refactorización: sé que una gran cantidad de 'refactorización' se trata de trabajar en torno al trabajo ocupado relacionado con el lenguaje, por lo que si Python es lo suficientemente liviano, entonces no lo necesitaremos, pero me parece que cosas como los cambios de nombre son esenciales para desarrollar iterativamente la calidad código independientemente del idioma.
  • Tiempo de inicio paralizante: una de las cosas que se supone que es bueno sobre los idiomas interpretados es la falta de tiempo de compilación que conduzca a un rápido desarrollo interactivo. Lamentablemente, puedo compilar una aplicación C # y ejecutarla más rápido de lo que IPy puede iniciar.
  • Piratería interactiva: se supone que la consola / respuesta IPy es buena para esto, pero no he encontrado una buena manera de tomar el código al que has llegado de forma interactiva y conservarlo en un archivo: cortar y pegar desde La consola es bastante miserable. Y la consola parece contener referencias a los ensamblados .NET que ha importado, por lo que debe cerrarlo y reiniciarlo si también está trabajando en C #. Hackear C # en algo como LinqPad parece una forma mucho más rápida y fácil de probar (y tiene Intellisense adecuado). ¿Usas la consola?
  • Depuración: ¿cuál es la historia aquí? Sé que alguien en el equipo de IPy está trabajando en un proyecto de hobby de línea de comando, pero digamos que no me atrae de inmediato un depurador de línea de comando. Realmente no necesito un depurador de pequeños scripts de Python, pero lo haría si tuviera que usar IPy para las pruebas unitarias de scripts, por ejemplo.
  • Prueba de unidad: puedo ver que los lenguajes dinámicos podrían ser excelentes para esto, pero ¿hay alguna integración IDE de prueba-corredor (como Resharper, etc.)? El libro de Foord tiene un capítulo sobre esto, lo cual admitiré que aún no he leído correctamente, pero parece involucrar conducir a un corredor de prueba en modo consola desde el símbolo del sistema, lo que parece ser un enorme paso atrás respecto al uso un corredor de prueba integrado como TestDriven.net o Resharper.

Tengo muchas ganas de creer en estas cosas, así que todavía estoy trabajando suponiendo que me he perdido algo. Realmente me gustaría saber cómo otras personas están lidiando con IPy, particularmente si lo están haciendo de una manera que no parece que hayamos perdido 15 años de desarrollo de herramientas.

Actualización: (julio de 2010) Esta pregunta parece bastante anticuada, ahora que hay Herramientas de IronPython para VS oficiales y PyCharm , ambos son muy prometedores y ninguno de los dos estaba presente cuando lo escribí. Gracias a todos los que contestaron. Para aquellos de ustedes que están contentos con sin las herramientas de refactorización automática, ¿puedo recomendarles que nunca, nunca, usen un IDE con una buena refactorización automática? Una vez que lo haya hecho, se preguntará por qué pensó que alguna vez estuvo contento con find-replace, y nunca querrá volver a trabajar sin él. Por lo menos, la capacidad de cambiar el nombre de los identificadores instantáneamente sin preocuparse por reemplazar el fragmento de texto incorrecto cambia todo su enfoque para nombrar cosas.

¿Fue útil?

Solución

do you use the .NET framework without Intellisense?

Sí Solo uso emacs con IronPython. " M - / " es lo suficientemente bueno para mi Ocasionalmente cambio a Reflector y MSDN cuando realmente necesito información sobre el SDK.

Refactoring

En realidad te refieres a "Refactorización automática" cuando dijiste "Refactorización". Realizo muchas refactorizaciones mientras codifico. Podría ser mejor con algo de automatización. Pero estoy bien con la refactorización manual. También me obliga a incluir más pruebas. Nunca he usado ningún IDE con la función de refactorización extensiva, tal vez por eso No estoy sufriendo La simple búsqueda y reemplazo está bien para mí.

Crippling startup time

Sí, este es mi dolor MAYOR, aunque estoy trabajando en 3GHz Quad-core con 4G Ram, hace falta 50 para ejecutar 359 casos de prueba. ¡La mitad de ese tiempo (25s) es el tiempo de inicio! Parece que IronPython realiza una tarea de procesamiento muy pesada al importar un módulo grande. Ahora estoy planeando dividir mis pruebas en partes para mitigar este dolor.

Interactive hacking - Do you use the console?

Utilizo la consola de vez en cuando, cuando quiero probar alguna idea ad hoc. No tengo problema con eso. Sin embargo, la mayoría de las veces escribí mi pensamiento en unit-test.

Debugging - what's the story here?

Si la depuración significa punto de ruptura e inspección variable. Solo uso la declaración impresa para esas cosas El tipo de aplicación en la que estoy trabajando está a punto de vivir y mantenerse durante al menos una década. Para manejar el código defectuoso, solo apuesto por 3 cosas: código comprensible, prueba unitaria y registro extenso.

Unit testing

Nunca me acerco a ninguna herramienta que mencione. Solo usa unittest.TextTestRunner. Además del horrible momento de inicio, no tengo ninguna otra queja.

** ACTUALIZADO **

Acabo de terminar de actualizar a IPy 2.6B1 con un resultado fenomenal. ¡El tiempo de inicio se reduce de 25 a 6 segundos y mi tiempo de prueba general se reduce de 50 a 16 segundos!

¡INCREÍBLE!

Otros consejos

¿Qué tal IronPython Tools para Visual Studio 2010?

Las herramientas IronPython proporcionan un editor de código Python, un sistema de proyecto basado en archivos y un sistema interactivo Intérprete de Python, todo dentro de Visual Studio 2010, y todo gratis. http://ironpython.net/tools/

Creo que este complemento cubriría la mayoría de sus puntos.

Espero que ayude

Patrick

IronPython es una gran solución, pero sigo volviendo a CPython para Windows. ¿Por qué?

En mi experiencia, CPython en Windows, Mac OS / X y * NIX son prácticamente iguales. Puedo usar casi todas las "baterías" en cada ambiente Frecuentemente desarrollo aplicaciones en Linux y envío a servidores Windows. Un par de problemas con el enhebrado a un lado, no he tenido problemas.

IronPython, por otro lado, es un contenedor de lenguaje Python alrededor de .Net Framework. Me parece mucho más agradable de usar que C #, pero eso es todo. Mis programas CPython no funcionan sin una considerable reelaboración. Las baterías para IronPython son diferentes.

Si su objetivo es ser productivo en .Net, entonces IPy probablemente esté bien. Sin embargo, si buscas habilidades portátiles de Python, entonces lo evitaría.

Estoy usando PyDev para escribir el código IronPython. Estoy tratando de separar el código específico de .NET tanto como sea posible para poder ejecutar los scripts de Python (Iron) desde PyDev. Gracias a PyDev, puedo usar Pylint que se puede encontrar en http://www.logilab.org/857. Las versiones recientes de PyDev pueden configurar el intérprete incluso por archivo o proyecto. Por lo tanto, puedo cambiar fácilmente los intérpretes de IronPython a CPython y viceversa. De esta manera, puedo ver que mi código es portátil entre las implementaciones de Python. (Aunque no estoy usando, Jython 2.5 RC también se puede usar en PyDev).

Con un código compatible con Python e IronPython 2.5, puedo usar la refactorización en PyDev, consulte http: // pydev .sourceforge.net / refactoring.html .

IronPython Studio sería una buena opción si admitiera IronPython 2.x, pero lamentablemente no lo hace.

PyDev, Wing, PyCharm y IronPython Tools para Visual Studio son compatibles con intellisense para .NET en IronPython. Tengo la sensación de que SharpDevelop también tiene inteligencia para IronPython.

El tiempo de inicio mejoró mucho en IronPython 2.6 y nuevamente en 2.7. Sin embargo, todavía es considerablemente más lento que CPython.

El reparador de bicicletas y la cuerda son dos herramientas de refactorización automáticas populares para Python. Nunca he encontrado la necesidad de ninguno de ellos.

pdb (el depurador de biblioteca estándar de Python) funciona con IronPython. PyDev, SharpDevelop y IronPython Tools para Visual Studio admiten la depuración de IronPython.

He usado herramientas de prueba integradas (Wing tiene un buen soporte de unittest. SharpDevelop admite unittest y unittest2 para IronPython, PyDev y PyCharm probablemente también tengan una buena integración de unittest). Prefiero ejecutar mis pruebas desde la línea de comandos. unittest2 es excelente para esto, ya que elimina la necesidad de escribir su propia colección de pruebas / código de ejecución.

Utilizo mucho el intérprete interactivo para la experimentación y ocasionalmente como un shell mejorado.

Últimamente he estado usando IronPython (y el DLR en general) en mis proyectos últimamente para varias cosas. Algunos ejemplos:

  • Creé un generador de documentos basado en plantillas que usa scripts py para construir y transformar las variables de contexto que se pasan al renderizador de plantillas (Excel, Word, html- > pdf)
  • Como evaluador de expresiones para un motor de reglas especializado. Los scripts se guardan en una columna en una tabla de base de datos y se evalúan en tiempo de ejecución para determinar qué regla se aplica.
  • Como pasos en un motor ETL. Básicamente tengo algunos componentes que pueden leer archivos de Excel y uso scripts de Python para transformar los datos y crear entidades de NHibernate para poblar una base de datos.
  • Scripts de configuración dinámica para componentes de C #.
  • Un motor de cálculo para algunos indicadores que deben crearse a partir de un gran conjunto de datos. Estoy combinando las extensiones paralelas con scripts precompilados, el rendimiento es bueno hasta ahora.

Cosas así. Una vez que el motor está configurado correctamente, con rutas y referencias configuradas, básicamente puede usar un script para casi cualquier cosa.

Casi todas estas cosas se ejecutan en aplicaciones asp.net mvc, y hasta ahora todo bien. Descubrí que ScriptEngine y algunos componentes como ScriptScope son seguros para subprocesos, por lo que incluso puedo compartir un motor configurado dentro de un contenedor IoC (por ejemplo, Windsor) entre controladores y demás.

En cuanto a un editor, edito Plus la mayor parte del tiempo. El editor de Python VS 2010 tiende a ser un poco inestable, aunque la edición rápida no es un problema.

Mi uso de IronPython se ha limitado a hacer prototipos rápidos para mí, así que no puedo decir mucho al respecto. Pero si está buscando un IDE específico para IronPython, IronPython Studio es aceptable. Le dará alguna funcionalidad Intellisense, aunque a veces es un poco escamosa, por lo que no cierre esa ventana de documentación de MSDN todavía. Le permitirá depurar interactivamente como cualquier otro proyecto .Net. También es compatible con el diseñador de formularios de Visual Studio 2008 si prefiere hacer su GUI de esa manera. No lo he probado, pero también puede admitir la ejecución de pruebas de nUnit usando TestDriven.net.

Lamentablemente, los cambios de nombre y otras características de refactorización ofrecidos por VS 2008 parecen no ser compatibles.

Estoy usando IPy en un entorno integrado para ejecutar scripts de prueba.

1 & amp; 2. Tiene razón: no hay mucho soporte para la edición o refactorización de código: el soporte adecuado de Visual Studio sería excelente.

Ignorando su tercer punto: interpretado vs compilado es un argumento antiguo.

Todavía no he hecho mucho pirateo interactivo, así que no puedo comentar sobre el 4to punto.

Utilizo el depurador de Visual Studio para depurar mis scripts IPy.

Tampoco sé acerca de una integración IDE de prueba unitaria.

Estoy ejecutando un conjunto de simulaciones de blackjack en Python 2.6 frente a IronPython 2.6, y a pesar de las exageraciones, IronPython parece ser un poco más lento (¿quizás en un 10%?) El código es muy simple, solo cosas como :

def highcount(hand):
  total=0
  for c in hand:
    if c[1]==11 and 11+total>21:
      total+=1
    else:
      total+=c[1]
  return total

y

def dmove():
  if ( (dhand[0][1]==11 and dhand[1][1]==10) or 
       (dhand[0][1]==10 and dhand[1][1]==11) ):
    return 21 # should return blackjack

  while 1:
    lc=lowcount(dhand)
    hc=highcount(dhand)
    if lc>21: return lc # dealer busts
    if lc>=17: return hc # stand on soft 17
    if hc>=17: return hc # stand on hard 17
    dhand.append(deck.pop()) # hit otherwise

Si las optimizaciones de .NET VM son similares al punto de acceso de JVM, es muy posible que durante ejecuciones más largas, IronPython pueda ejecutar la simulación más rápido.

Otro punto importante a tener en cuenta es que la simulación de blackjack se presta fácilmente para generar múltiples hilos que GIL de CPython hace completamente inútiles en términos de aumento de velocidad. Con IronPython obtengo la aceleración completa del 400% en un quadcore, lo cual es realmente genial.

El código no hace uso de ninguna característica esotérica de Python (eso es algo bueno) lo que significa que se ejecutó 100% sin modificaciones en IronPython.

Estoy usando Iron Python, no profesionalmente, desafortunadamente, sino como un lenguaje de Desarrollo Rápido para mis proyectos personales.

Python es un gran lenguaje para la facilidad de uso, brevedad pero legibilidad del código y simplicidad. Algo de esto se debe a que es un lenguaje dinámico, pero también a su sintaxis básica.

Sin embargo, no soy un gurú de cpython, y puedo obtener mucho más de Iron Python que cpython, ya que puedo aprovechar fácilmente la plataforma .NET, en la que estoy mucho más en casa. Estoy decepcionado de que actualmente no haya un puerto para las bibliotecas Twisted en cpython, las únicas bibliotecas extendidas de Python con las que me siento cómodo, ya que serían muy útiles en .NET.

También uso la ventana interactiva solo para probar estructuras .NET cuando estoy codificando en C #.

Acabo de comprar el libro de Foord, así que en este momento solo lo estoy aprendiendo. Realmente espero usarlo para el desarrollo web, pero lamentablemente tengo que esperar hasta que sea compatible con asp.net mvc. También planeo usarlo como herramienta de secuencias de comandos para sistemas Windows, ya que puedo utilizar el marco .net

En el trabajo usamos IronPython contra el modelo de objetos de SharePoint. Es perfecto para muchos pequeños programas que son más grandes que un script de PowerShell, pero no es algo que deba implementarse como un artefacto en SharePoint. Es ideal para la creación rápida de prototipos en servidores donde Visual Studio no está instalado. Normalmente usamos Notepad ++ como nuestro editor de elección.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top