복붙노트

[PYTHON] 부스트와 파이썬 3.x

PYTHON

부스트와 파이썬 3.x

boost.python은 어떻게 Python 3을 처리합니까? 파이썬 2 만인가?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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")
    
  6. from https://stackoverflow.com/questions/5539557/boost-and-python-3-x by cc-by-sa and MIT license