- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在过去的几天里,我尝试了所有方法来在 Python3 中安装 libtorrent。无论我尝试什么,我都会得到:
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 之间的区别。据我所知,rasterbar 是 libtorrent 的依赖项。
PyPi page它上面没有任何二进制文件,所以我不能 pip install
它。
我可以从the GitHub page下载包并通过运行以这种方式安装它:
$ python setup.py build
$ python setup.py install
创建:
/home/<user>/anaconda3/lib/python3.6/site-packages/python_libtorrent-1.1.5-py3.6.egg-info
但还是没有变化。这可能与我的 Python3 安装不在默认位置有关,但我不确定如何在安装 libtorrent 方面处理它。
我还找到了this类似的 SO 问题,其中接受的答案是明确的 NO。然而,最近有更多的评论说,从那时起,它已经成为可能,只是没有给出如何实现它的说明。
我已经完全没有想法了,无论多么荒谬,我都乐于接受任何建议。现在,我正在查看从 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 构建自己,这解释了 ImportError 中的 libboost_python-py27.so
。建议的解决方案是使用 -lboost_python3
而不是 -lboost_python
编译 C++ 库。 Makefile 的第 268 行是 BOOST_PYTHON_LIB = -lboost_python
所以我将其更改为 BOOST_PYTHON_LIB = -lboost_python3
并重新运行:
$ make
$ python setup.py build
$ python setup.py
(我无法重新运行 $ ./configure --enable-python-binding
因为它会将 Makefile 还原为再次使用 lboost-python)。不幸的是,我仍然收到相同的错误消息:undefined symbol: PyClass_Type
。我对 C++ 几乎一无所知,所以我不确定我是否遗漏了关于编译该库的一些非常明显的东西。
最佳答案
好的,我已经解决了。事实证明我有两个单独的 Python3 安装。默认一个,Anaconda 一个。此外,当我安装 Anaconda 时,我让它自己添加到我的 $PATH
环境变量中。我没有注意到我没有使用默认安装,因为我仍然能够通过 pip 等安装包。基本上,纯 Python 的东西工作正常。然而,由于 libtorrent 是 C++ 库之上的 Python 包装器,运行 $ ./configure --enable-python-binding
构建了我的 Anaconda Python 安装的所有 Python 位,以及所有 C++ 位到我的默认 Python 安装(或类似的,据我所知)。
解决方案是卸载Anaconda:$ sudo rm -rf ~/anaconda3
,并删除我的.bashrc
中设置的$PATH
变量Anaconda code>。为了更好的衡量,我还用 $ sudo apt-get remove
和 $ sudo apt-get purge
我安装的每个库都可以做与 libtorrent。我记不住所有的,但肯定包括 python3-libtorrent
、python-libtorrent
、python3-libboost
和 python-libboost
。一旦我这样做了,一个简单的 $ sudo apt-get install python3-libtorrent
就让它完美地工作了。
@Arvid,作为旁注,对我来说至少是 python example 中打印语句的最后一行需要更改为:
s.num_peers, state_str[s.state])
简单地说:
s.num_peers, s.state)
因为 s.state
包含一个表示状态的字符串,而不是需要映射到 state_str
列表的整数。不过,这可能只是 Python3 处理状态的结果;我还没有在 Python2 中测试过它。
关于linux - libtorrent 在 Python 3 中工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47372652/
编译libtorrent教程时'hello world'与: g++ main.cpp -o run -ltorrent-rasterbar -lboost_filesystem-mt -L/usr/
是否有人为洪流创建了填充文件? 如今有多少客户使用这些东西? “填充文件”是否全面? 我在ctorrent,trent,trasmission等新客户中没有发现此功能。 您是否具有此功能的实现或有关此
当我尝试使用 VIsual studio 9.0 进行构建时,我正在为我的应用程序使用提升,我得到1>LINK: fatal error LNK1104:无法打开文件“libtorrent.lib”
在 Libtorrent session 中有一些 enurm,我对如何设置 enurm 有点困惑,例如: struct session_settings { enum s
我如何正确转发声明一个类? //client_functions.cpp using namespace libtorrent; session Sess; bool Start_Client_Ses
我正在使用 libtorrent 将数据传输到 10k+ 个节点。这里我传输的数据非常小(大小为 10-50 MB)。我希望所有节点都将数据保存在内存中,直到所有其他节点完成下载以避免更多的磁盘 io
是否可以通过分配托管文件的服务器的 IP 地址来绕过跟踪器来制作 torrent 文件? 我对通过 libtorrent 的 bittorrents 文件传输协议(protocol)很感兴趣,他们以这
我正在尝试生成一个 torrent 并使用 python libtorrent 为其提供种子,它会生成 torrent,但不会为其提供种子。 我在 Ubuntu 14.04 上使用 libtorren
我有一个问题。我不是 C/C++ 程序员,libtorrent 文档对我来说并不是很清楚。没有像 libtorrent 的 python 文档那样的文档可供查找。 此刻,我尝试在 stackoverf
我使用add_magnet_uri获取信息,但是有一些资源响应慢,我应该使用什么来设置总超时时间? http://www.rasterbar.com/products/libtorrent/manua
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
使用 Rasterbar libtorrent 我不希望下载的数据放在我的硬盘驱动器上,而是放在管道或变量或其他软件上,所以我可以将它重定向到其他地方,Mysql,如果不是我想要的,甚至是垃圾,是如果
我想在开始下载之前设置上传/下载限制。对于前。目前我正在设置下载/上传限制,如下所示: info = lt.torrent_info(ft['torrent_info']) params = { 's
当通过 libtorrent(C++ 库)下载 torrent 时,会创建一个以 torrent 名称命名的文件夹,所有文件都下载到该文件夹中。例如,在 uTorrent 中,您可以在添加 tor
我想使用 libtorrent-rasterbar 来开发一些 torren 测试,但是当我尝试编译包中的示例时,我遇到了这个错误: g++ dump_torrent.cpp In file i
我已经在客户端开发了 torrent 程序,并使用 rutorrent 作为种子文件。我在 rutorrent 中使用插件 peer 来监控使用我的 torrent 应用程序的数字客户端。但在客户端选
我正在尝试设置 session 设置,但出现了一个我不太明白的错误,我能够正常设置 session ,根据 Libtorrent 文档,我只是将 session_settings 结构传递给 set_
我刚刚使用源代码编译并安装了 boost $密码 /Downloads/boost_1_58_0 ./b2 threading=multi link=static runtime-link=stati
据我所知,当播种或下载 Torrent 时,您的 IP 在跟踪器上并且会保留几个小时或几天 我如何使用 Libtorrent 手动告诉我的跟踪器我不再连接到跟踪器它应该忘记我的 IP,因为我既不播种也
我试图让 Session_Status 更新,但由于某种原因,结构的值永远不会更新, session 是这样启动的: using namespace libtorrent; session* Se
我是一名优秀的程序员,十分优秀!