2017-11-19 5 views
1

저는 지난 며칠 동안 파이썬 3에서 libtorrent를 설치하기 위해 모든 것을 시도했습니다. 내가 노력할 상관없이, 내가 얻을 : 나는 실행할 때libtorrent는 Python 3에서 작동합니까?

Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49) 
[GCC 7.2.0] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import libtorrent 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ModuleNotFoundError: No module named 'libtorrent' 

내가 오류를 얻을 :

$ sudo apt-get install python3-libtorrent 
$ sudo apt-get install libtorrent-rasterbar-dev 

은 정말 libtorrent의 차이, 그리고 libtorrent - rasterbar을 이해하지 않습니다. 내가 알 수있는 한, 래스터 바는 libtorrent에 대한 의존성이다.

PyPi page에는 바이너리가 없으므로 pip install 수 없습니다. 여전히 변화를

/home/<user>/anaconda3/lib/python3.6/site-packages/python_libtorrent-1.1.5-py3.6.egg-info 

을하지만 :

나는 the GitHub page에서 패키지를 다운로드하지 않고 그런 식으로 실행하여 설치할 수 있습니다

$ python setup.py build 
$ python setup.py install 

생성한다. 파이썬 3을 기본 위치에 설치하지 않고 설치하는 것과 관련이 있을지 모르지만 libtorrent를 설치하는 방법을 어떻게 처리해야할지 모르겠습니다.

나는 또한 this 비슷한 질문을 수락 대답은 최종 아니오입니다. 그러나 그것을 성취하는 방법에 대한 지침이 없다는 것을 제외하고는 그 이후로 가능 해졌다는 최근의 의견이 있습니다.

나는 철저하게 아이디어가 부족하며 어리석은 제안이 있어도 공개됩니다. 지금 당장 GitHub 페이지에서 얻은 패키지를 통해 프로젝트 디렉토리에 코드를 복사 한 다음 로컬 모듈로 가져올 수 있는지 확인하고 있지만 아직까지는별로 운이 좋지 않습니다. 작동하지 않는다면, 원래의 C++ libtorrent 라이브러리 용 Python3 래퍼를 작성해 보겠습니다. 그러나, 나는 누군가 다른 사람이 이것에서 시도하고 실패했기 때문에 어딘가에서 읽었고, 그래서 나는 성공을 기대하지 않는다.

편집 :

그래, 조금 더 알아 보았습니다. 필자는 어떻게 든 구성 파일이나 makefile이없는 repo 버전을 다운로드 할 수있었습니다.

$ ./configure --enable-python-bindings 
$ make 
$ python setup.py build 
$ python setup.py install 
$ python 
Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49) 
[GCC 7.2.0] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import libtorrent 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.62.0: undefined symbol: PyClass_Type 

내가이 봤, 분명히 PyClass_Type는 Python3에 정의되지 않은 : 지금이 바로 하나를 가지고, 내가 실행합니다. 그래서 그것은 여전히 ​​Python2에 대해 자체적으로 빌드하려고 시도하고있는 것으로 보이며, 이는 libboost_python-py27.so을 ImportError로 설명합니다. 제안 된 솔루션은 -lboost_python 대신 -lboost_python3을 사용하여 C++ 라이브러리를 컴파일하는 것이 었습니다. 메이크 파일의 라인 268 BOOST_PYTHON_LIB = -lboost_python 그래서 난 BOOST_PYTHON_LIB = -lboost_python3로 변경하고 다시 달렸다입니다 :

$ make 
$ python setup.py build 
$ python setup.py 

(I 다시 실행할 수 없습니다 $ ./configure --enable-python-binding를 다시 lboost - 파이썬을 사용하기 위해 Makefile을 되돌아 때문에). 불행히도, 나는 여전히 동일한 오류 메시지를받습니다 : undefined symbol: PyClass_Type. C++에 대해서는 아무 것도 모른다. 그래서 라이브러리를 컴파일하는 것에 대해 정말로 분명한 사실을 놓치고 있는지 잘 모르겠다.

+2

libboost_python-py27.so.1.62.0의 "27"은 python 버전 2.7을 나타냅니다. 파이썬 3.x를 위해 boost-python을 빌드해야합니다. – Arvid

+0

@Arvid 응답에 감사드립니다. 나는 http://www.boost.org/에서 부스트를 다운로드하고 여기 지침에 따라 만들었습니다 : https://eb2.co/blog/2012/03/building-boost.python-for-python-3.2/ 'project-config.jam'는 파이썬 경로를'python : 3.6 :/home//anaconda3;을 사용하여 나열 했으므로 변경하지 않아도됩니다. 그런 다음 명령을 다시 실행하여 libtorrent를 빌드했습니다. 불행히도, 나는 여전히 같은 오류가 발생합니다. – Sam

+0

btw, 당신은 libtorrent dev입니다, 맞습니까? 내가 문제를 해결할 때 libtorrent에 대한 많은 질문에 귀하의 게시물을 보았습니다. Torrent와 관련된 완벽한 라이브러리를 구축해 주셔서 감사합니다. 사람들이 그것을 만든 후에도 계속 돕는 개발자를 갖는 것이 좋습니다. 말할 것도없이 내가 일할 수 있다면, 당신은 나에게 많은 시간을 주었을 것이다. 그러나 훨씬 더 까다로운 버전을 함께 해킹 할 것이다. – Sam

답변

2

좋아, 나는 그것을 해결했다. 파이썬 3을 두 가지 설치했다. 기본 설정 및 아나콘다 설정입니다. 또한, 아나콘다를 설치했을 때, 나는 그것이 내 $PATH 환경 변수에 추가되도록했습니다.필자가 pip를 통해 패키지를 설치할 수 있었기 때문에 기본 설치를 사용하지 않았다는 사실을 알지 못했습니다. 기본적으로 순수 Python이 잘 작동했습니다. 그러나 libtorrent는 C++ 라이브러리 위에있는 Python 래퍼이므로 $ ./configure --enable-python-binding을 실행하면 Python 비트를 모두 내 Anaconda Python 설치에 설치하고 모든 C++ 비트를 기본 Python 설치 (또는 이와 비슷한 내용, 내가 알 수있는 것부터) . $ sudo rm -rf ~/anaconda3하고 $PATH 변수 아나콘다가 나는 또한, $ sudo apt-get remove 'D 및 $ sudo apt-get purge'libtorrent와 아무했다 내가 설치 한 모든 라이브러리를 거라고 내 .bashrc .FOR 좋은 측정을 설정 삭제 :

이 솔루션은 아나콘다를 제거하는 것이었다. 모두 기억할 수는 없지만 확실히 python3-libtorrent, python-libtorrent, python3-libboostpython-libboost이 포함되었습니다. 일단 내가 그것을했다면, 간단하게 $ sudo apt-get install python3-libtorrent이 완벽하게 작동합니다.

s.num_peers, state_str[s.state]) 

단순히 :

s.num_peers, s.state) 

@Arvid, 그냥 보조 노트로, 저를 위해 필요한 python example에서 print 문 적어도 마지막 줄에서 변경 될 수 있습니다 s.state에는 state_str 목록에 매핑해야하는 정수가 아닌 상태를 나타내는 문자열이 들어 있기 때문입니다. 이것은 파이썬 3이 어떻게 상태를 처리하는지에 대한 결과 일 수 있습니다. 파이썬 2에서는 테스트하지 않았다.