ImportError при импорте файла python в pyd

Итак, я пытаюсь импортировать модуль в папки, упакованные внутри файла .pyd. Вот что мне подойдет:

from apple import __init__

С яблоком, являющимся .pyd в том же каталоге, что и скрипт Python, и __init__, конечно, упакованным внутри .pyd. Это сработает, однако вот что я хочу сделать, но не работает:

from apple.seed.worm import WormManager

Объяснение: apple = pyd, seed = каталог в pyd, worm = каталог в seed-каталоге в apple pyd, WormManager = модуль python в каталоге червя.

Однако это не работает и приводит к тому, что модуль не найден. Конечно он есть и запакован в .pyd, но он просто не работает. Я даже сделал это:

from apple.seed import __init__

но даже это не работает, поэтому я знаю, что не импортирую это право.

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


person billyands55    schedule 13.09.2015    source источник


Ответы (2)


Сначала вам нужно запустить C:\path\to\pip\tool\pip install pyd из командной строки.

person JAW    schedule 13.09.2015
comment
Я только что сделал, не совсем уверен, как это помогает... не могли бы вы немного рассказать о том, как вы решаете проблему импорта? - person billyands55; 13.09.2015
comment
Кроме того, я не думаю, что вы понимаете, что я имею в виду. .pyd — это то же самое, что и .dll, но для Python это не язык d. - person billyands55; 13.09.2015

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

Сначала вы должны попытаться импортировать pyd:

import apple

Затем вы можете (вероятно) получить доступ к внутреннему API:

WM = apple.seed.worm.WormManager

Кроме того, ваш файл apple.pyd dll должен содержать функцию PyInit_apple() в соответствии с официальная документация. Если это не так или если он плохо определен (не определяет все подмодули), это может объяснить, почему вы не можете сделать from apple ....

person gaborous    schedule 02.10.2016