¿Cómo lidia boost.python con Python 3? ¿Es solo Python 2?Boost y Python 3.x
Respuesta
Las versiones más recientes de Boost deberían funcionar bien con Python V3.x. Este apoyo se ha añadido hace bastante tiempo, creo que después de un exitoso proyecto Google Summer of Code en 2009.
La manera de utilizar Python V3 con Boost es configurar correctamente el sistema de construcción mediante la adición de, por ejemplo:
using python : 3.1 : /your_python31_root ;
a su archivo user-config.jam.
Si aparece "Error: No mejor alternativa para/python_for_extension" Asegúrese de tener
using python : 3.4 : C:\\Python34 : C:\\Python34\\include : C:\\Python34\\libs ;
only in user-config.jam en su camino a casa y en ninguna otra parte. Utilice barras diagonales inversas dobles cuando compile bajo Windows con mingw (toolset = gcc) o MSVC (toolset = msvc). Compile con cmd, no con msys, y si también tiene instalado python 2.7, elimínelo de PATH en ese shell. En primer lugar hacer
bootstrap.bat gcc/msvc
suponiendo que tiene las herramientas gcc/MSVC disponibles a través de PATH (/ de las alternativas, pero el uso de sólo uno, o deje de distancia)
Después también se puede hacer
booststrap.sh --with-bjam=b2
en MSYS para generar un proyecto de config.jam, pero que editar para eliminar el "uso de Python" y "/ usr", ..
a continuación, el siguiente
b2 variant=debug/shared link=static/shared toolset=gcc/msvc > b2.log
Con estática, los ejemplos de inicio rápido de python no me funcionaron, aunque preferiría prescindir de la dll boost_python.
No probé con Linux, pero debería ser más sencillo.
Consulte this para saber cómo compilar boost
con python
. Muestra la forma de compilar con python2
con Visual Studio 10.0 (2010). Pero sigo el mismo procedimiento para un proyecto en el que estoy trabajando actualmente y funciona bien con Python 3.5 y Visual Studio 14.1 (2017).
Si obtiene this error en la construcción de su proyecto de pitón impulso, sólo tiene que añadir valor a BOOST_ALL_NO_LIB
Preprocessor Definitions
(dentro de C \ C++> pestaña preprocesador) en las propiedades del proyecto.
Y también, no olvide agregar la ubicación de archivos boost .dll
a la ruta del sistema.
libboostpython debe construirse con python3 para poder hacerlo. Esto no funciona con boost 1.58 (que viene con Ubuntu 16.04), así que asegúrese de descargar la última distribución de boost. Acabo de hacer esto con boost_1_64_0.
Como se mencionó anteriormente, busque el archivo "user-config.jam" en la distribución del código de impulso y cópielo en $ HOME.
cp /path/to/boost_1_64_0/tools/build/example/user-config.jam $HOME
A continuación, edite la línea pitón (la última línea) por lo que es dice:
using python : 3.5 : /usr/bin/python3 : /usr/include/python3.5m : /usr/lib ;
Esto es correcto para Ubuntu 16.04. Puede usar pkg-config para encontrar el directorio de inclusión correcto.
[email protected]puter > pkg-config --cflags python3
-I/usr/include/python3.5m -I/usr/include/x86_64-linux-gnu/python3.5m
Y solo necesita el primer directorio de inclusión.
A continuación, cree un impulso desde el principio. (Lo siento.) Se instala en/usr/local
cd /path/to/boost_1_64_0
./bootstrap.sh --prefix=/usr/local
./b2
sudo ./b2 install
Ahora salta en el directorio ejemplo pitón, y construir el tutorial
cd /path/to/boost_1_64_0/libs/python/example/tutorial
bjam
Esto no construirá correctamente si usted tiene un sistema de instalación de impulsar, porque, bajo el capó, bjam se está vinculando a libboostpython utilizando el parámetro g ++ "-lboost". Pero, en Ubuntu 16.04, esto irá y encontrará "/usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0", y luego no se podrán cargar los enlaces de python. De hecho, obtendrá su error:
ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0: undefined symbol: PyClass_Type
Si desea ver el g ++ ordena que bjam está utilizando, haga lo siguiente:
[email protected] > bjam -d2 -a | grep g++
g++ -ftemplate-depth-128 -O0 -fno-inline -Wall -g -fPIC -I/usr/include/python3.5m -c -o "hello.o" "hello.cpp"
g++ -o hello_ext.so -Wl,-h -Wl,hello_ext.so -shared -Wl,--start-group hello.o -Wl,-Bstatic -Wl,-Bdynamic -lboost_python -ldl -lpthread -lutil -Wl,--end-group
Aquí vemos el problema, es necesario "- L/usr/includ/lib "justo antes" -lboost_python ". Así ejecutar esta enlazar la librería compartida correctamente:
g++ -o hello_ext.so -Wl,-h -Wl,hello_ext.so -shared -Wl,--start-group hello.o -Wl,-Bstatic -Wl,-Bdynamic -L/usr/local/lib -lboost_python -ldl -lpthread -lutil -Wl,--end-group
Es posible que tenga que volver a ejecutar ldconfig (o reiniciar)
sudo ldconfig
Y usted está finalmente listo para ir:
[email protected] > python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import hello_ext
>>> hello_ext.greet()
'hello, world'
>>> exit()
esto fue totalmente útil para mí. la clave para hacer que mi proyecto se construya con un todo personalizado (gcc, python3, boost) fue editar mi archivo 'project-config.jam', como usted indicó. a saber, para ajustar la línea 'using python: ...' para listar cada uno de los ejecutables binarios para el intérprete python3, la carpeta de inclusión para él y el directorio lib. Después de reconstruir el impulso y la instalación, mi proyecto se compila correctamente utilizando Python 3. ¡Gracias! – ofloveandhate
- 1. Tornado y Python 3.x
- 2. python 2.xo 3.x
- 3. Boost C++ y Android 3
- 4. Rendimiento: Python 3.x frente a Python 2.x
- 5. Problemas con Boost :: Python y Boost :: Threads
- 6. ¿Cuándo admitirá Django Python 3.x?
- 7. Python 3.x tkinter error de importación
- 8. intente ... excepto ... como error en Python 2.5 - Python 3.x
- 9. Node.js - ¿Realmente necesito Visual Studio? Y Python 2.X o 3.X?
- 10. Hola mundo con boost python y python 3.2
- 11. Comparación de JBoss AS 7.x y Glassfish 3.x?
- 12. boost :: python y weak_ptr: cosas que desaparecen
- 13. Boost Python y vectores de shared_ptr
- 14. Seguimiento de la migración global a Python 3.x
- 15. ¿Qué bibliotecas SOAP existen para Python 3.x?
- 16. Escribir un módulo para Python 2.xy 3.x
- 17. Ayúdame a terminar este auto desafío de Python 3.x
- 18. pasando cadenas a funciones ctypes en Python 3.x
- 19. Python 2 y Python 3 __cmp__
- 20. Nuevo en Python ... Python 3 y Matplotlib
- 21. ¿Qué hay de nuevo en Python 3.x?
- 22. Python 3.x: prueba si el generador tiene elementos restantes
- 23. función de llamada Python 3.x con sys.argv []
- 24. Python: trama de 2d curvas de 3 listas: x, y y rho?
- 25. Python 3 y tipado estático
- 26. ¿Se va a transportar Paramiko a Python 3.x?
- 27. cadenas de formato para stdin.write() en Python 3.x
- 28. Boost Python: contenedor polimórfico?
- 29. boost :: python :: list length
- 30. si x = 3 y z no está asignado, ¿por qué z = x-- - --x evalúa a 2?
Parece que Están trabajando en eso. http://www.boost.org/doc/libs/1_46_0/libs/python/doc/news.html – mkaes