2012-05-29 4 views
3

Я включил интерпретатор Python 2.7.2 в приложение C++, используя API Python C.Как разрешить импорт сторонних библиотек скриптами, вызванными встроенным интерпретатором Python?

На целевых компьютерах я не могу гарантировать установку Python, поэтому я пытаюсь заставить встроенный интерпретатор посмотреть папку, в которой находится мое приложение. Итак, в прикладной диктории у меня есть папка Lib, Libs и DLL для Python.

В коде я использовал Py_SetPythonHome() Py_SetProgramName() для загрузки Python, а также для установки стандартных библиотек.

Один из тестовых сценариев, которые я использую есть:

import csv 

import numpy 

CSV-линии теперь хорошо. В каталоге \ libs я вижу пакеты сайта \ numpy. Но импорт прерывается на этой линии. Для этого я использую numpy 1.6.1.

Я думаю, мне, возможно, потребуется изменить путь поиска модуля - это правильно и как наилучшим образом достичь этого, чтобы позволить сторонним библиотекам, таким как numpy, быть доступными для моих скриптов? Вы можете предположить, что я мог бы создать абсолютный путь к каталогу numpy, если это поможет.

EDIT: Дополнительная информация - Мне удалось создать трассировку, и ошибка, которую я получаю, находится в \ numpy \ core \ _ init _.py, когда он пытается выполнить строку «import multiarray» с ошибкой «ImportError: ошибка загрузки DLL: указан указанный модуль connot». Проверяя каталог, я нахожу multiarray.pyd. Есть предположения?

+0

Когда вы говорите «сбой импорта», вы имеете в виду, что он вызывает исключение ImportError? – deStrangis

+0

Мне сложно понять, что на самом деле ошибка: в основном, я пытаюсь импортировать скрипт (который содержит экземпляр класса) с помощью PyImport_Import. Если я попытаюсь «импортировать numpy» в скрипт, я получаю нулевой указатель в результате. Если я прокомментирую это, я получаю ненулевой указатель – Fritz

+0

@deStrangis: я проверил, и да, это ошибка импорта. У меня есть каталог nump site-packages во вложенном интерпретаторе sys.path, но импорт просто сбой ... – Fritz

ответ

0

Это оказалось ошибкой рассогласования DLL. Версия numpy, которую просматривал код, имела несколько иной путь компиляции к коду моего кода на C++, который вставлял интерпретатор.

Решением было перекомпилировать numpy против дистрибутива Python, который я использовал в своем приложении, но используя точно такие же настройки компилятора. Это устранило проблему.

0

У меня точно такая же проблема с вами, когда я использую API-интерфейс python для импорта numpy. Некоторые .pyd-модули не могут быть импортированы. Когда я перешел на boost.python, проблем нет. Возможно, вы также можете попробовать boost.python. Here есть образец:

Смежные вопросы