[pyar] Correr un script de python dentro de un programa en C

Angel Java Lopez ajlopez2000 en gmail.com
Vie Feb 7 18:23:51 ART 2014


Ah! Gracias por el detalle de la resolucion.

Interesante, habra que investigar que hace el cygwin.

Por ahora, sigo con tener un solo Python 2.7 en mi maquina, entonces ;-)

Nos leemos!

Angel "Java" Lopez
@ajlopez


2014-02-07 11:30 GMT-03:00 Emanuel Benatti <emanuel.benatti en gmail.com>:

> Revise y efectivamente los sys.path de ambos script son diferentes.
> Mirando un poco más me encontré con que el python que ejecuta el comando
> system es el que se encuentra en el directorio de Cygwin. Por otro lado, al
> correr python en la línea de comandos (la de windows, no la de cygwin), se
> ejecuta el python de que se encuentra en el directorio WinPython. Hice la
> verificación, y ambas versiones son iguales, es decir, no sólo tienen el
> mismo número de versión, sino que además tienen instalados los mismos
> módulos.
>
> Más allá de la (tal vez inútil) redundancia de tener dos versiones
> idénticas de python en la misma máquina, al encontrarme con esta situación,
> lo que pensé fue el python de cygwin no tenía el módulo numpy o alguno de
> los mencionados en el mensaje de error. Lo que hice para verificarlo fue
> buscar cada uno de los .py que aparecen en el mensaje de error en los
> directorios mencionados al correr sys.path (en el python de cygwin, que es
> que utiliza la función system). No faltaba ni uno. Es más, al importar
> (desde el python de cygwin) cada uno de los módulos que se mencionaban en
> el mensaje de error todo andaba más que bien. Tampoco había error corriendo
> el .py desde la terminal de cygwin.
>
> Por otro lado, en la lista de SciPy me dijeron que este podía ser un bug
> exclusivo de Windows[1], por lo que me puse a buscar un método alternativo
> para correr el script de python y me encontré que existe una librería
> llamada windows.h que tiene una función llamada CreateProcess que permite
> correr aplicaciones en la línea de comando de windows. Así que lo que
> termine haciendo fue convertir el .py en .exe utilizando py2exe y para
> luego correr el ejecutable creado utilizando la función CreateProcess.
>
> Estaba por escribir que había encontrado la solución cuando leí el mail de
> Ángel que decía que el podía correr todo sin problemas. Esto tiraba un poco
> abajo lo que estaba pensando... lo cual me agrego un poco más de confusión
> al problema. Lo que terminé haciendo para verificar si efectivamente era un
> problema de versión, fue desinstalar el python de cygwin, de modo de
> obligar a system a buscar la versión de python que andaba... y el problema
> se solucionó!
>
> Que es lo que faltaba en el python de cygwin que impedía importar
> correctamente numpy? No tengo ni idea y creo que nunca lo sabré, pero
> claramente el problema andaba por ahí.
>
> Gracias a todos!
> No sólo solucione el problema que tenía sino que además encontré una forma
> alternativa de hacer las cosas.
>
> [1]
> http://mail.scipy.org/pipermail/numpy-discussion/2009-December/047075.html
>  Bien, recien probe:
>
> Windows Server 2008
> 32 bits
> Python 2.7 en el path
> Me baje el numpy de
> http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
> corri el instalador
>
> Mi programa python mypython.py
>
> import numpy
> print "hello, world"
>
>
> Mi programa myc.c
>
> #include <stdlib.h>
> #include <stdio.h>
>
> int main(){
>     char py_cmd[200];
>
>     sprintf(py_cmd, "python mypython.py");
>     system(py_cmd);
>
> }
>
> Mi programa python funciona con
>
> python mypython.py
>
> Agrege el DevKit para compilar
>
> gcc myc.c
>
> ejecuto a.exe y anda joya
>
> Tenes info de:
>
> - Que PATH estas usando?
> - Como compilas el programa c?
> - Que pasa si llamas a un programa python que muestre el sys.path,
> diferencias entre llamarlo a mano, y desde c?
> - Tu python realmente esta en /usr/lib/python27 o el cargador de numpy se
> confundio y detecto que cree estar en un linux o similar?
>
> Nos leemos!
>
> Angel "Java" Lopez
> @ajlopez
>
>
>
>
>
> 2014-02-05 9:35 GMT-03:00 Emanuel Benatti <emanuel.benatti en gmail.com>:
>
>> Hola a todos,
>>
>> estoy tratando de correr un script hecho en python dentro del código de
>> un programa hecho en C. Me pareció que lo mas sencillo era utilizar la
>> función system de C, asi que después de un par de intentos di con lo que
>> parecía ser la fórmula correcta. Sin embargo, cuando quiero correr un
>> script que requiere importar numpy obtengo el siguiente mensaje de error:
>>
>> Traceback (most recent call last):
>>   File "pyemb.py", line 1, in <module>
>>     import numpy
>>   File "/usr/lib/python2.7/site-packages/numpy/__init__.py", line 137, in
>> <module>
>>     import add_newdocs
>>   File "/usr/lib/python2.7/site-packages/numpy/add_newdocs.py", line 9,
>> in <module>
>>     from numpy.lib import add_newdoc
>>   File "/usr/lib/python2.7/site-packages/numpy/lib/__init__.py", line 13,
>> in <module>
>>     from polynomial import *
>>   File "/usr/lib/python2.7/site-packages/numpy/lib/polynomial.py", line
>> 17, in <module>
>>     from numpy.linalg import eigvals, lstsq
>>   File "/usr/lib/python2.7/site-packages/numpy/linalg/__init__.py", line
>> 48, in <module>
>>     from linalg import *
>>   File "/usr/lib/python2.7/site-packages/numpy/linalg/linalg.py", line
>> 23, in <module>
>>     from numpy.linalg import lapack_lite
>> ImportError: No such file or directory
>>
>> Esto es lo que pongo en el codigo en c:
>> #include <stdlib.h>
>> #include <stdio.h>
>>
>> int main(){
>>     char py_cmd[200];
>>
>>     sprintf(py_cmd, "python pyemb.py");
>>     system(py_cmd);
>>
>> }
>>
>> siendo pyemb.py:
>> import numpy
>> print "all fine with the world"
>>
>>
>> Lo mas extraño de todo es que si en la linea de comandos corro el comando:
>> python pyemb.py
>>
>> todo resulta como debe ser.
>>
>> Estoy realmente perdido en esto. ¿Qué diferencia puede haber en correr el
>> comando usando system que haciéndolo directamente?
>>
>> Probé tambien importar otros módulos, como subprocess, math, y sys y no
>> tuve ningún problema.
>>
>> Estoy usando python 2.7 en windows XP.
>>
>> En la computadora también hay instalado un python 2.5, aunque cuando
>> escribo "python" en la línea de comandos el intérprete que me sale es el de
>> la versión 2.7, así que no creo que el problema pase por ahí. ¿Estoy en lo
>> correcto?
>>
>> Muchas gracias
>> --
>> Emanuel
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140207/11a7b3f1/attachment-0001.html>


More information about the pyar mailing list