[PYTHON] 부스트와 파이썬 3.x
PYTHON부스트와 파이썬 3.x
boost.python은 어떻게 Python 3을 처리합니까? 파이썬 2 만인가?
해결법
-
==============================
1.새로운 버전의 Boost는 Python V3.x에서 잘 작동합니다. 이 지원은 꽤 오래 전에 추가되었으며, 나는 2009 년 Google Summer of Code 프로젝트가 성공적으로 끝난 후 믿습니다.
새로운 버전의 Boost는 Python V3.x에서 잘 작동합니다. 이 지원은 꽤 오래 전에 추가되었으며, 나는 2009 년 Google Summer of Code 프로젝트가 성공적으로 끝난 후 믿습니다.
Boost와 함께 Python V3을 사용하는 방법은 다음을 추가하여 빌드 시스템을 올바르게 구성하는 것입니다.
using python : 3.1 : /your_python31_root ;
user-config.jam 파일에 저장하십시오.
-
==============================
2."오류 : / python_for_extension에 대한 최선의 대안"이 없다면
"오류 : / python_for_extension에 대한 최선의 대안"이 없다면
using python : 3.4 : C:\\Python34 : C:\\Python34\\include : C:\\Python34\\libs ;
홈 경로의 user-config.jam과 그 밖의 다른 곳은 없습니다. mingw (toolset = gcc) 또는 MSVC (toolset = msvc)를 사용하여 창에서 컴파일 할 때 이중 백 슬래시를 사용하십시오. msys가 아닌 cmd로 컴파일하고, Python 2.7이 설치된 경우 해당 쉘의 PATH에서 제거하십시오. 먼저 할 일
bootstrap.bat gcc/msvc
gcc / msvc 도구를 PATH를 통해 사용할 수 있다고 가정하면 (/ 대안을 위해, 그러나 하나만 사용하거나 떠나십시오)
그 후에도 할 수 있습니다.
booststrap.sh --with-bjam=b2
msys에서 project-config.jam을 생성하지만 "python"및 "/ usr"사용을 제거하기 위해 편집해야합니다.
다음은
b2 variant=debug/shared link=static/shared toolset=gcc/msvc > b2.log
static을 사용하면 python quickstart 예제가 나에게 적합하지 않지만 boost_python dll을 사용하지 않는 것이 좋습니다.
나는 리눅스에서 시도하지 않았지만, 그곳에서 좀더 직관적이어야한다.
-
==============================
3.이렇게하려면 libboostpython을 python3으로 빌드해야합니다. 이것은 boost 1.58 (Ubuntu 16.04와 함께 제공)에서 작동하지 않으므로 최신 boost 배포판을 다운로드하십시오. boost_1_64_0을 사용하여 방금했습니다.
이렇게하려면 libboostpython을 python3으로 빌드해야합니다. 이것은 boost 1.58 (Ubuntu 16.04와 함께 제공)에서 작동하지 않으므로 최신 boost 배포판을 다운로드하십시오. boost_1_64_0을 사용하여 방금했습니다.
위에서 언급했듯이, 코드 배포를 향상시키면서 "user-config.jam"파일을 찾아 $ HOME에 복사하십시오.
cp /path/to/boost_1_64_0/tools/build/example/user-config.jam $HOME
그런 다음 python 줄 (마지막 줄)을 다음과 같이 편집하십시오.
using python : 3.5 : /usr/bin/python3 : /usr/include/python3.5m : /usr/lib ;
이것은 우분투 16.04에 맞습니다. pkg-config를 사용하여 올바른 include 디렉토리를 찾을 수 있습니다.
user@computer > pkg-config --cflags python3 -I/usr/include/python3.5m -I/usr/include/x86_64-linux-gnu/python3.5m
그리고 첫 번째 include 디렉토리 만 있으면됩니다.
그런 다음 처음부터 부스트를 구축하십시오. (죄송합니다.) / usr / local에 설치합니다.
cd /path/to/boost_1_64_0 ./bootstrap.sh --prefix=/usr/local ./b2 sudo ./b2 install
이제 python 예제 디렉토리로 이동하고 튜토리얼을 빌드하십시오.
cd /path/to/boost_1_64_0/libs/python/example/tutorial bjam
후드 아래에 bjam이 g ++ 매개 변수 "-lboost"를 사용하여 libboostpython에 연결하기 때문에 시스템을 boost로 설치할 경우 올바르게 빌드되지 않습니다. 하지만 우분투 16.04에서는 "/usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0"을 찾으면 파이썬 바인딩이로드되지 않습니다. 사실, 당신은 그의 오류를 얻을 것이다 :
ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0: undefined symbol: PyClass_Type
bjam이 사용하는 g ++ 명령을 보려면 다음을 수행하십시오.
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
여기서 우리는 문제를 보았습니다. "-lboost_python"바로 앞에 "-L / usr / includ / lib"가 필요합니다. 공유 라이브러리를 올바르게 링크하려면 다음을 실행하십시오.
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
ldconfig를 다시 실행하거나 재부팅해야 할 수도 있습니다.
sudo ldconfig
그리고 마침내 갈 준비가되었습니다.
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.파이썬으로 부스트를 빌드하는 방법을 알기 위해 이것을 참조하십시오. Visual Studio 10.0 (2010)을 사용하여 python2로 빌드하는 방법을 보여줍니다. 하지만 현재 진행중인 프로젝트에서 동일한 절차를 거치며 파이썬 3.5 및 Visual Studio 14.1 (2017)과 잘 작동합니다.
파이썬으로 부스트를 빌드하는 방법을 알기 위해 이것을 참조하십시오. Visual Studio 10.0 (2010)을 사용하여 python2로 빌드하는 방법을 보여줍니다. 하지만 현재 진행중인 프로젝트에서 동일한 절차를 거치며 파이썬 3.5 및 Visual Studio 14.1 (2017)과 잘 작동합니다.
파이썬 향상 프로젝트를 빌드 할 때이 오류가 발생하면 BOOST_ALL_NO_LIB 값을 프로젝트 속성의 사전 처리기 정의 (C \ C ++> 전 처리기 탭 내)에 추가하십시오. 또한 시스템 경로에 부스트 .dll 파일 위치를 추가하는 것을 잊지 마십시오.
-
==============================
5.파이썬에 대한 경로가 공백을 포함하고 있다면, 당신은 꽤 타고있을 것입니다. 많은 시행 착오 끝에 결국 마침내 뭔가를 얻을 수있었습니다. 내 user-config.jam (bjam을 찾기 위해 내 홈 디렉토리에 있어야 함)을 보자.
파이썬에 대한 경로가 공백을 포함하고 있다면, 당신은 꽤 타고있을 것입니다. 많은 시행 착오 끝에 결국 마침내 뭔가를 얻을 수있었습니다. 내 user-config.jam (bjam을 찾기 위해 내 홈 디렉토리에 있어야 함)을 보자.
import toolset : using ; using python : 3.6 : \"C:\\Program\ Files\ (x86)\\Microsoft\ Visual\ Studio\\Shared\\Python36_64\\python.exe\" : C:\\Program\ Files\ (x86)\\Microsoft\ Visual\ Studio\\Shared\\Python36_64\\include : C:\\Program\ Files\ (x86)\\Microsoft\ Visual\ Studio\\Shared\\Python36_64\\libs ;
일치하지 않는 인용문이 의도되었으며 필요하다고 판단됩니다. 이걸로 나는 boost-python을 빌드하고 그것을 내 CMakeLists.txt에 Boost :: python36으로 사용할 수 있습니다. 여전히 한 가지 문제가 남아 있습니다 : 저는 수동으로 파이썬에 링크해야합니다.
target_link_libraries(MyTarget Boost::boost Boost::python36 "C:/Program Files (x86)/Microsoft Visual Studio/Shared/Python36_64/libs/python36.lib") target_include_directories(MyTarget PRIVATE "C:/Program Files (x86)/Microsoft Visual Studio/Shared/Python36_64/include")
from https://stackoverflow.com/questions/5539557/boost-and-python-3-x by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] C ++ 문자열 파싱 (파이썬 스타일) (0) | 2018.10.23 |
---|---|
[PYTHON] Matplotlib : 웹 서버의 대화 형 플롯 (0) | 2018.10.23 |
[PYTHON] db.Model 객체를 json으로 직렬화하는 방법? (0) | 2018.10.23 |
[PYTHON] dtype으로 팬더 열 선택 (0) | 2018.10.23 |
[PYTHON] 파이썬으로 터미널 출력을 얻으려면 어떻게해야합니까? [복제] (0) | 2018.10.23 |