Boost e Python 3.x

Como aumenta?o python lida com o Python 3? É só Python 2?

Author: Vertexwahn, 2011-04-04

4 answers

As versões mais recentes do Boost devem funcionar bem com o Python V3.x. Este suporte foi adicionado há algum tempo, eu acredito que depois de um projeto bem sucedido do Google Summer of Code em 2009.

A forma de usar o Python V3 com o Boost é configurar correctamente o sistema de compilação adicionando, por exemplo:

using python : 3.1 : /your_python31_root ;

Para a sua configuração do utilizador.jam file.

 13
Author: hkaiser, 2011-04-04 17:32:21

Se tiver "erro: não há melhor alternativa para /python_for_ extension" certifique-se que tem

using python : 3.4 : C:\\Python34 : C:\\Python34\\include : C:\\Python34\\libs ;

Só na configuração do utilizador.geleia no teu caminho e em mais lado nenhum. Usar barras duplas ao compilar sob o windows com o mingw (toolset=gcc) ou o MSVC (toolset=msvc). Compile com o cmd, não com o msys, e se você também tiver o python 2.7 instalado, remova-o do PATH nessa linha de comandos. Primeiro do

bootstrap.bat gcc/msvc

Assumindo que tem as ferramentas gcc/msvc disponíveis via PATH (/ para a alternativas, mas utilize apenas uma, ou deixe de fora)

Depois também podes fazer

booststrap.sh --with-bjam=b2

No msys para gerar um projecto-config.jam, mas precisa editá-lo para remover o "usando python" e "/usr",..

Depois o seguinte

b2 variant=debug/shared link=static/shared toolset=gcc/msvc > b2.log

Com estática, os exemplos de arranque rápido em python não funcionaram para mim, embora eu preferisse passar sem o boost_ Python dll.

Eu não tentei no linux, mas deveria ser mais direto lá.

 4
Author: Roland Puntaier, 2017-05-23 11:47:11

Libboostpython precisa ser construído com python3 para fazer isso. isto não funciona com o boost 1, 58 (que vem com o Ubuntu 16, 04), por isso certifique-se de baixar a última distribuição boost. Acabei de fazer isto com o boost_164_0.

Como mencionado acima, encontre o ficheiro " configuração do utilizador.jam " in you boost code distribution, and copy it to $HOME.

cp /path/to/boost_1_64_0/tools/build/example/user-config.jam $HOME

Depois, edite a linha python (a última linha), de modo a que esta diga:

using python : 3.5 : /usr/bin/python3 : /usr/include/python3.5m : /usr/lib ;

Isto está correcto para Ubuntu. 16.04. Você pode usar o pkg-config para encontrar a Diretoria de inclusão correta.

user@computer > pkg-config --cflags python3
-I/usr/include/python3.5m -I/usr/include/x86_64-linux-gnu/python3.5m

E só precisa do primeiro directório de inclusão.

Em seguida, construir impulso a partir do zero. (Triste.) I install it to/usr / local

cd /path/to/boost_1_64_0
./bootstrap.sh --prefix=/usr/local
./b2 
sudo ./b2 install

Agora salta para o directório de exemplo em python, e constrói o tutorial

cd /path/to/boost_1_64_0/libs/python/example/tutorial
bjam

Isto não irá ser construído correctamente se tiver uma instalação do sistema de boost, porque, sob a capa, o bjam está a ligar-se à libboostpython usando o parâmetro g++ "- lboost". Mas, em Ubuntu 16.04, isto irá apenas encontrar "/ usr/lib/x86_64-linux-gnu / libboost_ py27.so.1.58.0", e então as ligações em python não serão carregadas. Na verdade, você vai ter o erro dele:

ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0: undefined symbol: PyClass_Type

Se quiser ver os comandos g++ que o bjam está a usar, faça isto:

user@computer > 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
Aqui vemos o problema, você precisa de "- l/usr / includ / lib "pouco antes de "- lboost_python". Então execute isso para ligar a biblioteca compartilhada corretamente:
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
Pode ter de repetir ldconfig (ou reiniciar)
sudo ldconfig
E finalmente estás pronto para ir.
user@computer > 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()
 4
Author: Zendel, 2017-08-19 02:20:33

Veja isto para saber como construir boost com python. Ele mostra a maneira de construir com python2 com Visual Studio 10.0 (2010). Mas eu passo pelo mesmo procedimento para um projeto que estou trabalhando atualmente e que funciona bem com python 3.5 e Visual Studio 14.1 (2017).

Se obter Este erro ao criar o seu projecto de impulso em python, basta adicionar BOOST_ALL_NO_LIB Valor a Preprocessor Definitions (dentro da página de pré-processador C\C++>) nas propriedades do seu projecto.
E também, não se esqueça de adicionar a localização dos ficheiros boost .dll à localização do seu sistema.

 0
Author: Ramesh-X, 2017-08-17 13:47:45