2010-05-26 27 views
5

Necesito ejecutar scripts de Python dentro de una aplicación basada en C. Soy capaz de importar módulos estándar de las bibliotecas de Python, es decir: Incrustar Python en C: Problemas para importar módulos locales

PyRun_SimpleString("import sys") 

Pero cuando intento importar un módulo local can

PyRun_SimpleString("import can") 

devuelve el mensaje de error:

Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: No module named can 

Cuando escribo el comando import can en IPython, el sistema puede encontrarlo.

¿Cómo puedo vincular mi aplicación con la lata? He intentado establecer PYTHONPATH en mi directorio de trabajo.

Respuesta

8

La incrustación de la biblioteca Python no agrega '' a sys.path como el intérprete interactivo. Use PySys_SetPath() para agregar el directorio apropiado.

Oh hey, look what I found.

+0

lo siento; Soy nuevo en Python. Que quieres decir con ''? – Drew

+0

La cadena vacía. Lo que significa que la ruta actual en 'sys.path'. –

+0

Lo hice funcionar ... Aunque no estoy seguro de cómo y estoy tratando de replicar los resultados en otra máquina. He intentado usar sys.path.append y concatenando cadenas que representan sys.path y mi ruta deseada. Parece que no puedo tener tanto la ruta del sistema como mi camino al mismo tiempo. Gracias por la ayuda. – Drew

-1

He encontrado que esto funcione mucho más robusta,

PyObject *sys = PyImport_ImportModule("sys"); 
PyObject *path = PyObject_GetAttrString(sys, "path"); 
PyList_Append(path, PyUnicode_FromString(".")); 
Cuestiones relacionadas