[Python-es] pyodbc y cygwin

Sio2 sio2sio2 en gmail.com
Vie Ene 22 22:27:07 CET 2010


Antes de nada un frasecita de agradecimiento a la Trinidad (Santísima,
por supuesto) que ha vuelto a poner esto en marcha. Lo hice el día que
reavivaron esto, pero parece ser que python.org filtra los correos que
envío con mi propio smtp, y no llegó mi mensaje. Así que tengo que usar
esta cuenta de gmail y usar el smtp de google.

Al grano.

No me ha quedado más remedio que hacer un programita en python que corra
en windows, pero mientras le depuro los errores me gustaría ejecutarlo
dentro de cygwin para meterlo dentro de screen y poder conectarme por
ssh para ir viendo los errores que me escupe (tiene una interfaz web de
consulta y el manejo es remoto).

El caso es que el único módulo que uso, además de los que vienen en la
distribución estándar es pyodbc. Y pyodbc es compilado, porque me parece
que está desarrollado en c++. Así que no me queda otra que compilarlo,
ya que he probado a copiar el compilado para windows a secas, pero no
vale. De hecho, es imposible ejecutar el python para windows dentro de
cygwin.

He instalado python (obviamente) y gcc en cygwin y he intentando
compilar con un:

$ ./setup.py build

la versión 2.1.6 de pyodbc para python 2.5 (que es el que hay disponible
en cygwin), pero infructuosamente. La documentación de pyodbc dice que
se necesita ODBC 3.0, pero no tengo ni idea de qué aplicación/paquete es
ese. Sé qué en C:\WINDOWS\SYSTEM32 hay un odbc32.dll y algún otra
librería para odbc. Por lo que me permiten ver de los errores mis
rudimentarios conocimientos de C parece ser que faltan como mínimo
ficheros .h de cabeceras, pero no tengo ni idea de cuáles son o como
obtenerlos. La compilación me escupe esto:

#v+
running build
running build_ext
building 'pyodbc' extension
creating build
creating build/temp.cygwin-1.7.1-i686-2.5
creating build/temp.cygwin-1.7.1-i686-2.5/home
creating build/temp.cygwin-1.7.1-i686-2.5/home/Administrador
creating build/temp.cygwin-1.7.1-i686-2.5/home/Administrador/pyodbc-2.1.6
creating build/temp.cygwin-1.7.1-i686-2.5/home/Administrador/pyodbc-2.1.6/src
gcc -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DPYODBC_MAJOR=2 -DPYODBC_MINOR=1 -DPYODBC_MICRO=6 -DPYODBC_BUILD=0 -I/usr/include/python2.5 -c /home/Administrador/pyodbc-2.1.6/src/buffer.cpp -o build/temp.cygwin-1.7.1-i686-2.5/home/Administrador/pyodbc-2.1.6/src/buffer.o
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++
In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sql.h:13,
                 from /home/Administrador/pyodbc-2.1.6/src/pyodbc.h:76,
                 from /home/Administrador/pyodbc-2.1.6/src/buffer.cpp:12:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqltypes.h:17: error: `ULONG' does not name a type
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqltypes.h:18: error: `USHORT' does not name a type
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqltypes.h:24: error: `PVOID' does not name a type
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqltypes.h:25: error: `PVOID' does not name a type
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqltypes.h:26: error: `PVOID' does not name a type
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqltypes.h:27: error: `PVOID' does not name a type
[... Otras muchísimas línas con errores semejantes ...]
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqltypes.h:157: error: `BYTE' does not name a type
In file included from /home/Administrador/pyodbc-2.1.6/src/pyodbc.h:76,
                 from /home/Administrador/pyodbc-2.1.6/src/buffer.cpp:12:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sql.h:346: error: `SQLUSMALLINT' has not been declared
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sql.h:346: error: `SQLPOINTER' has not been declared
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sql.h:348: error: `SQLCHAR' has not been declared
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sql.h:348: error: `SQLCHAR' has not been declared
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sql.h:348: error: `SQLCHAR' has not been declared
[... Otras muchísimas línas con errores semejantes ...]
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sql.h:402: error: `SQLPOINTER' has not been declared
In file included from /home/Administrador/pyodbc-2.1.6/src/pyodbc.h:77,
                 from /home/Administrador/pyodbc-2.1.6/src/buffer.cpp:12:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1184: error: `SQLHWND' has not been declared
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1202: error: `SQLUSMALLINT' has not been declared
[... Otras muchísimas línas con errores semejantes ...]
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1203: error: expected constructor, destructor, or type conversion before "ODBCGetTryWaitValue"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1203: error: expected `,' or `;' before "ODBCGetTryWaitValue"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1204: error: expected constructor, destructor, or type conversion before "ODBCSetTryWaitValue"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1204: error: expected `,' or `;' before "ODBCSetTryWaitValue"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1205: error: `LPWSTR' was not declared in this scope
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1205: error: `LPWSTR' was not declared in this scope
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1205: error: `DWORD' was not declared in this scope
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1205: error: initializer expression list treated as compound expression
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1207: error: expected constructor, destructor, or type conversion before "TraceReturn"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1207: error: expected `,' or `;' before "TraceReturn"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1208: error: expected constructor, destructor, or type conversion before "TraceVersion"
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1208: error: expected `,' or `;' before "TraceVersion"
In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlext.h:1214,
                 from /home/Administrador/pyodbc-2.1.6/src/pyodbc.h:77,
                 from /home/Administrador/pyodbc-2.1.6/src/buffer.cpp:12:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlucode.h:22: error: `SQLCHAR' has not been declared
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlucode.h:22: error: `SQLCHAR' has not been declared
[... Otras muchísimas línas con errores semejantes ...]
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/sqlucode.h:96: error: `SQLPOINTER' has not been declared
In file included from /home/Administrador/pyodbc-2.1.6/src/buffer.cpp:12:
/home/Administrador/pyodbc-2.1.6/src/pyodbc.h:93: error: `IsSet' declared as an `inline' variable
/home/Administrador/pyodbc-2.1.6/src/pyodbc.h:93: error: `DWORD' was not declared in this scope
/home/Administrador/pyodbc-2.1.6/src/pyodbc.h:93: error: `DWORD' was not declared in this scope
/home/Administrador/pyodbc-2.1.6/src/pyodbc.h:94: error: initializer expression list treated as compound expression
/home/Administrador/pyodbc-2.1.6/src/pyodbc.h:94: error: expected `,' or `;' before '{' token
In file included from /home/Administrador/pyodbc-2.1.6/src/buffer.cpp:14:
/home/Administrador/pyodbc-2.1.6/src/pyodbcmodule.h:43: error: `HENV' does not name a type
/usr/include/python2.5/datetime.h:186: warning: 'PyDateTimeAPI' defined but not used
error: command 'gcc' failed with exit status 1
#v-

Y en estas estoy. He curioseado por internet, pero no he logrado sacar
nada.

¿Ha intentado alguno hacerlo? Desde ya, muchas gracias.

Vale.

-- 
   Patrimonio es un conjunto de bienes, matrimonio es un
conjunto de males.
                  --- Enrique Jardiel Poncela --



Más información sobre la lista de distribución Python-es