libtorrent现在支持python3吗?如果支持如何安装它。
我想用python3编写一个DHT Crawler,我不知道为什么我的代码alaways得到了Connection错误的对象重置,所以我想使用libtorrent,如果有另一个lib,我很乐意使用它。我最大的问题是,将infohash转换为torrent文件。这可能是代码问题吗?
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()
答案 0 :(得分:1)
是的,libtorrent(应该)支持python 3。
构建和安装python绑定的基本方法是运行setup.py
。这要求所有依赖项都正确安装在distutils期望的地方。如果这样可行,它可能是最简单的方式,因此值得一试。我相信你必须使用python3来调用这个python脚本,如果这是你正在构建的内容。
要使用主构建系统构建(并手动安装生成的模块),您可以按照.travis文件(对于unix)或appeyor文件中的步骤进行操作。 在你的情况下,你想指定一个3.x版本的python,但它的本质是:
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
请注意,在实际构建步骤中,您可能希望将已绑定的boost链接到boost,如果已安装,则可以与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