Investigar cómo crear un módulo de python en C con Microsoft Visual Studio 2013 me causó bastantes dolores de cabeza por lo que para salvar a otras personas del mismo dolor, escribí este artículo que ilustra el proceso paso a paso. La solución resultante esta disponible en GitHub.

REQUISITOS PREVIOS

Al escribir extensiones nativas para Python se dice que es de vital importancia utilizar exactamente el mismo compilador que utilizó el compilador en sí mismo (o más bien su Python incrustado) Blender. Esto es especialmente importante en Windows donde incluso diferentes versiones de Visual Studio pueden romper la compatibilidad. Sin embargo, he encontrado que Visual Studio 2013 puede ser utilizado para compilar una extensión que se puede utilizar tanto para la versión de Blender compilado con msvc2008 y msvc2013.

Actualmente, Blender se construye con Visual Studio 2013, esto se puede verificar mediante la apertura de Blender y generando la información en el sistema de Ayuda -.> Info del sistema. En el archivo de texto generado (disponible en el editor de texto) de la línea con la versión de Python debe decir algo como: . 1800 64 bits .... El 1800 parte es la parte interesante, ya que identifues la versión de Visual Studio, donde 1800 significa MSVC 2013.

El lanzamiento oficial Blender 2,70 para Windows todavía se construye con MSVC 2008 (la cadena de información sobre la versión del sistema mostrara 1,500) no he encontrado ningún problema de compatibilidad, pero, por supuesto, su kilometraje puede variar. Sin embargo, es muy importante que coincida con la plataforma: una extensión de 64 bits sólo funciona para 64 bits Blender!

ESCRIBIR UN MÓDULO DE EXTENSIÓN EN C

El punto de partida para escribir una extensión es esta página. Es una introducción bastante completa, pero su contenido es independiente de la plataforma. Para compilar el código C, en realidad, en una biblioteca dinámica que se pueda utilizar en Windows se necesita información adicional. Desafortunadamente parte de la información que se muestra en esta página es incorrecta o incompleta (/export:initexample no es necesario, la dll necesita una extensión pyd.) y hay algunos pasos confusos, también podrían tener la información enumerada para una mejor comprensión.

En el siguiente tutorial voy a suponer que Blender esta instalado en C:\Blender y que estamos utilizando MVSC 2013 Express Edition para escritorio. También supongo que ha obtenido la biblioteca de Python con la que Blender esta construido con, a C:\BlenderLibraries. Necesitamos la fuente de estas bibliotecas para Python.h y archivos de inclusión. (Usted puede obtener estas bibliotecas con cualquier cliente de Subversion desde svn.blender.org, vea aquí para obtener instrucciones. Asegúrese de obtener las versiones de 64 bits si esta compilando para una plataforma de 64 bits y vera que la carpeta se llama win64_vc12 a pesar de que estas usando msvc 2013)

DIEZ PASOS FÁCILES

Son necesarios los siguientes pasos para crear una extensión simple. Cada paso se explica en detalle a continuación.

  1. Crear un nuevo proyecto de DLL.
  2. Agregar una nueva plataforma x64, si es necesario.
  3. Configura la extensión para usar.
  4. Configurar el directorio include.
  5. Configurar el directorio de la biblioteca.
  6. Añadir las dependencias de bibliotecas.
  7. Añadir el código fuente.
  8. Genere el proyecto.
  9. Copie la biblioteca a la instalación de Blender.
  10. Pruébelo de Blender.



Crear un nuevo proyecto de DLL
Archivo-> Nuevo proyecto.
plantillas-> Visual C + + -> Win32-> Proyecto Win32.
Nombre: BlenderTest (se puede colocar en cualquier lugar, deje todos los valores predeterminados).
En el asistente de la aplicación que se abre seleccione DLL y proyecto vacío.

Agregar una nueva plataforma x64, si es necesario
i = Si usted esta trabajando en/para una plataforma de 64 bits, tendrá que añadir una plataforma x64 a su solución.
haga clic en el gestor de configuración [por debajo de la barra de menú en la barra de tareas].
agregar una nueva plataforma activa [haga clic en la parte que probablemente aparezca Win32].
seleccione x64 y dejar todos los ajustes por defecto.

Configura la extensión a usar
Aunque una extensión nativa es sólo una DLL, Python quiere que tenga una extensión .pyd:
En las propiedades del proyecto BlenderTest
para todas las configuraciones establecidas
las propiedades de configuración -> General de la extensión de destino para pyd.

Configurar el directorio include
El compilador debe ser capaz de encontrar el Python.h include file.
Configuration properties -> C/C++ -> General Add
'C:\BlenderLibraries\win64_vc12\python\include\pyt hon3.3' to Additional Include directories

Configurar el directorio de la biblioteca
Las bibliotecas de Python deben funcionar así, para todas las configuraciones.

Configuration properties -> Linker -> General Add
'C:\BlenderLibraries\win64_vc12\python\lib' to Additional Library directories

Añadir las dependencias de bibliotecas
Cada configuración es dependiente de una librería diferente:
para la configuración de depuración
Linker -> Input Add 'python33_d.lib' to Additional Dependencies
para la configuración de lanzamiento
Linker -> Input Add 'python33.lib' to Additional Dependencies

Añadir el código fuente
En el explorador de soluciones, haga clic derecho en la carpeta Archivos de código fuente en el proyecto BlenderTest y seleccione añadir -> nuevo elemento. Elija archivo C++ y darle a BlenderTest.cpp es su nombre (aunque eres libre de elegir lo que quieras).

Copie el código de ejemplo (es posible que desee utilizar este) en el editor.

construir la solución (una advertencia sobre un enlace dll inconsistente de link dll se puede ignorar).

Genere el proyecto
Seleccione la configuración de lanzamiento y haga clic en Generar -> Generar solución.

El módulo estará en la subcarpeta BlenderTest\x64\Release y será llamado BlenderTest.pyd

Copie la biblioteca a la instalación de Blender
Copia BlenderTest.pyd a algún lugar donde Blender pueda encontrarlo, por ejemplo en el directorio site-packages dentro del directorio de instalación de Blender (por ejemplo, C: \ Blender \ 2.70 \ python \ lib \ site-packages)

Pruébelo de Blender
Abrir la consola de python en Blender
Importe BlenderTest
BlenderTest.foo ()

La consola del sistema (Window -> toggle system console) debe mostrar 'Hola Mundo'.

Publicado por Michael en blenderthings.