Ich habe in den letzten Tagen alles versucht, um libtorrent in Python3 zu installieren. Egal, was ich versuche, erhalte ich:Funktioniert libtorrent in 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'
ich keine Fehler, wenn ich laufen:
$ sudo apt-get install python3-libtorrent
$ sudo apt-get install libtorrent-rasterbar-dev
Ich verstehe nicht wirklich den Unterschied zwischen libtorrent und libtorrent-rasterbar. Soweit ich das beurteilen kann, ist die Rasterbar eine Abhängigkeit von libtorrent.
Die PyPi page hat keine Binärdateien auf, so kann ich nicht pip install
es.
kann ich das Paket von the GitHub page herunterladen und es auf diese Weise installieren, indem Sie:
$ python setup.py build
$ python setup.py install
Welche schafft:
/home/<user>/anaconda3/lib/python3.6/site-packages/python_libtorrent-1.1.5-py3.6.egg-info
Aber immer noch keine Veränderung. Es kann etwas damit zu tun haben, dass meine Python3-Installation nicht an einem Standardspeicherort ist, aber ich bin mir nicht sicher, wie ich das bei der Installation von libtorrent handhaben soll.
Ich fand auch ähnlich SO Frage, wo die angenommene Antwort eine endgültige NO ist. Es gibt jedoch neuere Kommentare, die besagen, dass dies seither möglich ist, außer dass keine Anweisungen dazu gegeben werden, wie dies zu erreichen ist.
Ich habe keine Ideen mehr und bin offen für irgendwelche Vorschläge, egal wie lächerlich. Im Moment schaue ich durch das Paket, das ich von der GitHub-Seite bekommen habe, um zu sehen, ob ich den Code irgendwie in mein Projektverzeichnis kopieren und dann als lokales Modul importieren kann, aber ich habe bisher nicht viel Glück. Wenn das nicht funktioniert, werde ich meinen eigenen Python3-Wrapper für die ursprüngliche C++ - Bibliothek libtorrent schreiben. Ich habe jedoch irgendwo gelesen, dass jemand anderes versucht hat und versagt hat, also erwarte ich keinen Erfolg.
EDIT:
Okay, ich habe ein wenig weiter gekommen. Irgendwie gelang es mir, eine Version des Repos herunterzuladen, die keine Konfigurationsdatei oder Makefiles enthielt. Nun, da ich das Recht haben, ein, ich laufe:
$ ./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
ich diese gegoogelt, und anscheinend PyClass_Type nicht in Python3 definiert. Es scheint also, dass es immer noch versucht, sich selbst für Python2 zu bauen, was die libboost_python-py27.so
im ImportError erklärt. Die vorgeschlagene Lösung bestand darin, die C++ - Bibliotheken mit -lboost_python3
anstelle von -lboost_python
zu kompilieren. Linie 268 des Makefiles ist BOOST_PYTHON_LIB = -lboost_python
so habe ich es zu BOOST_PYTHON_LIB = -lboost_python3
und wieder ran:
$ make
$ python setup.py build
$ python setup.py
(Ich kann nicht erneut ausgeführt $ ./configure --enable-python-binding
, weil es das Makefile kehrt lboost-Python wieder zu verwenden). Leider bekomme ich immer noch die gleiche Fehlermeldung: undefined symbol: PyClass_Type
. Ich weiß fast nichts über C++, also bin ich mir nicht sicher, ob ich etwas wirklich Offensichtliches über das Kompilieren der Bibliothek verpasse.
die "27" in libboost_python-py27.so.1.62.0 bezieht sich auf Python-Version 2.7. Sie müssen Boost-Python für Python 3.x sowie – Arvid
gebaut haben Danke für die Antwort @Arvid. Ich heruntergeladen Boost von http://www.boost.org/ und baute es nach den Anweisungen hier: https://eb2.co/blog/2012/03/building-boost.python-for-python-3.2/ der 'project-config.jam' hat meinen Python-Pfad als' using python: 3.6:/home//anaconda3; 'aufgelistet, also glaube ich nicht, dass ich es ändern muss. Ich habe dann die Befehle zum Erstellen von Libertorrent erneut ausgeführt. Leider bekomme ich immer noch den gleichen Fehler. –
Sam
BTW, du bist der Libertorrent-Entwickler, oder? Ich habe deine Beiträge zu vielen SO-Fragen zu Libertorrent gesehen, als ich mich um die Fehlersuche gekümmert habe. Vielen Dank für den Aufbau einer solchen kompletten Bibliothek für Torrent-ähnliche Sachen. Es ist großartig, einen Entwickler zu haben, der den Leuten weiterhilft, nachdem sie ihn erstellt haben. Ganz zu schweigen davon, ob ich es funktioniere, du wirst mich gerettet haben, aber viele Wochen würde es dauern, um eine weit Cracker Version zu hacken – Sam