Libtorrent загружен, и файл модуля существует, pip говорит, что он существует, но я не могу импортировать его в Python

Я пытаюсь добавить libtorrent в свой Python. Моя проблема заключается в том, что, несмотря на то, что я испробовал множество, хотя и странных, обходных путей (подробнее об этом позже), чтобы заставить libtorrent работать с моим Python, я не могу импортировать модуль на всю жизнь.

Я пройду через то, что я пробовал. Я наткнулся на «решения», которые помогли мне частично, но не на всем пути. Я даже пытался следовать инструкциям самого создателя, предоставленным в Stack Overflow.

Давайте сделаем несколько шагов назад и посмотрим, что я пытался сделать. Мы начнем с наддува. Если вы не знали, для работы libtorrent требуется ускорение. Мои знания не велики, когда речь идет о повышении, поэтому я не буду объяснять это. Итак, как и во всех всех инструкциях, которым я следовал, говорилось, что требуется ускорение. Я быстро установил boost и добавил его путь в таблицу окружения. Впоследствии я запустил файл bat, предоставленный в boost, и он создал два файла (возможно, больше) B2.exe и BJAM . B2 — это то, что мне нужно было использовать для следующих шагов.

Я продолжил, перейдя в загруженную папку boost (версия 1.66) > инструменты > сборка > пример, а затем отредактировав файл user-config.jam, добавив следующие элементы:

с помощью msvc : 14.0 ;
с использованием gcc : : : -std=c++11 ;
с использованием python : 3.6 : C:\Users\XXXX\AppData\Local\Programs\Python\Python36-32 : C: \Users\XXXX\AppData\Local\Programs\Python\Python36-32\include: C:\Users\XXXX\AppData\Local\Programs\Python\Python36-32\libs;

Затем я открыл командную строку x64 Native tool для VS2017 с повышенными привилегиями и выполнил следующую команду

b2.exe --hash openssl-version=pre1.1 link=общий libtorrent-link=общий stage_module stage_dependencies

также предоставлено Арвидом (я полагаю, создателем) в папке libtorrent>bindings>python. Начался 5-минутный период загрузки. Это дало мне следующую информацию:

Performing configuration checks

- 32-bit                   : yes (cached)
- arm                      : no  (cached)
- mips1                    : no  (cached)
- power                    : no  (cached)
- sparc                    : no  (cached)
- x86                      : yes (cached)
- symlinks supported       : yes (cached)
...patience...
...patience...
...patience...
...found 7252 targets...
...updating 27 targets...

заканчивая тем, что это

...updated 27 targets...

Инструкции в основном останавливаются на этом, поэтому вы можете подумать, что теперь он правильно настроен. Это не так. Я сразу же перешел в папку «bindings>python» и, конечно же, там существуют файлы libtorrent.pyd и libtorrent.lib. Выглядело многообещающе. Я загрузил командную строку, проверил Pip (список pip) и увидел в списке libtorrent. Ввел python и попытался импортировать libtorrent.

Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit   
(Intel)] on win32    
Type "help", "copyright", "credits" or "license" for more information.    
>>> import libtorrent    
Traceback (most recent call last):    
File "<stdin>", line 1, in <module>    
ImportError: DLL load failed: The specified module could not be found.    

Файл pyd существует, поэтому я попытался вручную перетащить его в папку DLL Python, но все равно не смог его импортировать. Я даже зашел так далеко, чтобы сделать руководство

 sys.path.append('D:\Downloads\libtorrent-rasterbar-1.1.7\libtorrent- 
 rasterbar-1.1.7\bindings\python')

Это некоторые люди предложили сделать, потому что это может быть не связано.

Я в недоумении.

Я не могу его импортировать, но он явно существует не только в списке пипсов, но и в папке libtorrent > bindings > python (файлы pyd и lib).

Я также попытался запустить файл setup.py. Который делает то же самое, но не получает меня дальше.

Я сделал наблюдение: папка папки в папке libtorrent > Bindings > python > bin имеет странное имя: «d796976f6d11336977dac24301151009», содержащая папку src, libtorrent.exp, libtorrent.lib, libtorrent.pdb, libtorrent.pyd, libtorrent.pyd.manifest и libtorrent.pyd.rsp

Мне кажется, что установка или загрузка не были полностью завершены. Однако это может быть не так, это просто необразованное предположение. Кроме того, файл libtorrent.lib, найденный в папке libtorrent > bindings > python, и файл libtorrent.pyd имеют размер 2 КБ и 3000 КБ соответственно.

Может он испорчен? Я не правильно связал?

Я использую 32-битную версию Python 3.6.5 (также существует 64-битная версия, но по какой-то причине она вообще не работает с libtorrent). 64-битная система на базе Windows с установленной Windows 10. Буст 1.66.0. Пытаюсь скачать/установить/импортировать libtorrent-rasterbar-1.1.7


person Hoaz    schedule 25.04.2018    source источник
comment
Просто бегло просматривая это, вы говорите, что открыли командную строку собственного инструмента x64 для настройки и сборки библиотеки. Он утверждает, что, тем не менее, настроил и построил 32-битную версию, но не лучше ли открыть командную строку встроенного инструмента x86, чтобы вы не полагались на его логику «кросс-компиляции»?   -  person abarnert    schedule 25.04.2018
comment
Также: вы убедились, что pyd на самом деле 32-битный? Кроме того, нет ли случайно на вашем пути libtorrent.py, который импортируется, а затем пытается импортировать какой-то другой pyd?   -  person abarnert    schedule 25.04.2018
comment
Вы убедились, что все зависимости общей библиотеки модуля libtorrent python также доступны? то есть сам libtorrent и библиотеки boost. Я вижу, вы поделились ссылкой с теми,   -  person Arvid    schedule 26.04.2018
comment
@Arvid, не могли бы вы подробнее рассказать о том, что вы подразумеваете под доступностью? Каким образом? Спасибо   -  person Hoaz    schedule 27.04.2018
comment
когда загрузчик ОС пытается загрузить общий объект (модуль python), он также попытается загрузить все свои общие зависимости объектов, такие как libc. Модуль Python libtorrent зависит от библиотеки libtorrent, которая также часто создается и компонуется как общий объект. Эта библиотека должна быть установлена, чтобы загрузчик ОС мог ее найти. Если это невозможно, загрузка модуля завершится ошибкой. Я бы ожидал другого сообщения об ошибке, если бы это было проблемой, но может иметь смысл убедиться, что это не так.   -  person Arvid    schedule 28.04.2018