2017-09-24 164 views
1

libtorrent現在支持python3嗎?如果支持如何安裝它。我想用python3編碼一個DHT Crawler,我不知道爲什麼我的代碼很快被對等錯誤重置了連接,所以我想使用libtorrent,如果有另一個lib,我很樂意使用它。我最大的問題是,將infohash轉換爲torrent文件。它可能是一個代碼問題?Python3.6如何安裝libtorrent?

class Crawler(Maga): 
async def handler(self, infohash, addr): 
    fetchMetadata(infohash, addr) 


def fetchMetadata(infohash, addr, timeout=5): 
tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
tcpServer.settimeout(timeout) 
if tcpServer.connect_ex(addr) == 0: 
    try: 
     # handshake 
     send_handshake(tcpServer, infohash) 
     packet = tcpServer.recv(4096) 
     # handshake error 
     if not check_handshake(packet, infohash): 
      return 
     # ext handshake 
     send_ext_handshake(tcpServer) 
     packet = tcpServer.recv(4096) 

     # get ut_metadata and metadata_size 
     ut_metadata, metadata_size = get_ut_metadata(packet), get_metadata_size(packet) 

     # request each piece of metadata 
     metadata = [] 
     for piece in range(int(math.ceil(metadata_size/(16.0 * 1024)))): 
      request_metadata(tcpServer, ut_metadata, piece) 
      packet = recvall(tcpServer, timeout) # the_socket.recv(1024*17) # 
      metadata.append(packet[packet.index("ee") + 2:]) 

     metadata = "".join(metadata) 

     logging.info(bencoder.bdecode(metadata)) 
    except ConnectionResetError as e: 
     logging.error(e) 
    except Exception as e: 
     logging.error(e) 
    finally: 
     tcpServer.close() 

回答

1

是,libtorrent(應該)支持Python 3的

構建和安裝Python綁定的基本方法是通過運行setup.py。這就要求所有的依賴關係都在distutils期望的地方正確安裝。如果這可行的話,它可能是最簡單的方法,所以它值得一試。我相信你必須使用python3調用這個python腳本,如果這就是你正在構建的。

要使用主構建系統進行構建(並手動安裝生成的模塊),可以按照.travis文件(對於unix)或appeyor文件中的步驟操作窗口。 你的情況,你想指定的Python 3.X版本,但它的本質是:

brew install boost-python 
echo "using python : 2.7 ;" >> ~/user-config.jam 
cd bindings/python 
bjam -j3 stage_module libtorrent-link=static boost-link=static 

測試:

python test.py 

注意,在實際構建步驟可能要如果您已經安裝了該軟件,則可以與共享資源進行鏈接,並在安裝後與libtorrent共享,或者也將安裝它。

在Windows上:

添加以下$HOMEPATH\user-config.jam

using msvc : 14.0 ; 
using gcc : : : <cxxflags>-std=c++11 ; 
using python : 3.5 : c:\\Python35-x64 : c:\\Python35-x64\\include : c:\\Python35-x64\\libs ; 

然後運行:

b2.exe --hash openssl-version=pre1.1 link=shared libtorrent-link=shared stage_module stage_dependencies 

測試:

c:\Python35-x64\python.exe test.py 
+0

我只是運行test.py ,我得到了錯誤: 回溯(最近通話最後一個): 文件,3號線,在 進口libtorrent爲LT 導入錯誤 「\ test.py」:DLL加載失敗:%1不是有效的Win32的應用程序 –

+0

Python版本是Python 3.6.2(v3.6.2:5fd33b5,2017年7月8日,04:57:36)[MSC v.1900 64位(AMD64)]在win32 –

+0

上,表明構建失敗或者構建的版本錯誤蟒蛇。它也可能意味着模塊找不到它的一個依賴關係。你可以嘗試libtorrent-link = static和boost-link = static。你在建立哪個版本的libtorrent? appveyor腳本爲Windows上的python 3構建。 – Arvid