2014-01-30 3 views
1

Я следую учебнику, чтобы вызвать код python из программы на C++ с the python docs.Как вызвать файл python, которому необходимо импортировать пакеты?

Все работает отлично, когда вы пытаетесь вызвать пример multiply. Теперь, если я добавить строку исходного кода Python импортирующей библиотеку, позволяет сказать openpyxl,

from openpyxl import load_workbook 

Я получаю сообщение об ошибке из питона

ImportError: No module named openpyxl 

Я подумал, что если я импортировать библиотеку системы, У меня не было бы проблем, но я также получаю сообщение об ошибке, если попытаюсь импортировать datetime.

У меня нет ошибки, если я импортирую файл с консоли python. В моей системе установлена ​​библиотека openpyxl.

Так что мой вопрос: как импортировать исходный код python, который должен импортировать пакеты?

EDIT: Хорошо, я забыл что-то упомянуть, я не был абсолютно честен с вами, ребята, извините.

Попытка запустить пример Я столкнулся с проблемой: я не мог заставить python найти файл multiply.py, и строка PyImport_Import всегда возвращает null.

Моим решением было добавить путь, в котором я знал, что мой источник python был с помощью PySys_SetPath. Проблема в том, что я просто понял, что эта функция не добавляет новый каталог, она просто перезаписывает PYTHONPATH. Итак, теперь python может найти multiply.py, но абсолютно ничего.

Конечно, я удалил эту строку, но теперь у меня есть другой вопрос: почему python не может найти мой источник, если файл находится только в том же каталоге компилируемой программы на C++?

я понял, что мой sys.path из моей питона консоли был немного отличается от пути показал в своем встроенном питона: первый был в начале списка пустой строки ''. Я не эксперт по python, но когда я добавляю эту строку в свой путь, я могу импортировать multiply.py, поэтому, похоже, именно по этой причине я не мог импортировать модули, которые были расположены по отношению к моему исполняемому файлу, отсутствовал в этом пустом пути но все еще не знают, что это значит.

Должен поблагодарить @ paul-evans, который дал мне идею добавления пути для поиска моих файлов.

+0

У вас есть несколько версий python, установленных в вашей системе? – SethMMorton

+0

У меня есть python 2.7, python 3 и python 3.3. Я уверен, что я использую версию 2.7, вызывая 'PyRun_SimpleString (" import sys \ nprint (sys.version) ");' – camolin3

+0

Переменная 'PYTHONPATH' считывается только в' site.py', поэтому if по какой-то причине ваш интерпретатор не читает этот файл, ваш 'PYTHONPATH' будет проигнорирован. – SethMMorton

ответ

1

Это то, что PYTHONPATH для. Вы можете установить его как переменную среды, содержащую каталоги модулей списка, или в самом коде:

import sys 
sys.path.append("path/to/openpyxl/module") 
+0

Хорошо, он действительно работал для поиска 'openpyxl', но он все еще не пытается загрузить пакет' datetime' ... Нужно ли добавлять все каталоги, которые нужны моим библиотекам? – camolin3

+0

Не найти модуль 'datetime' больше похож на проблему установки, но добавление его в PYTHONPATH будет работать как временное исправление. С момента установки вы реорганизовали свои каталоги на python? Вы также можете попробовать просто переустановить python. –

+0

Я использую стандартный python 2.7.5, установленный с ubuntu 13.10. И проблема с поиском местоположения не возникает из консоли python. Я думаю, что это может быть временное исправление, но мне нужно найти лучший вариант, эта программа предназначена для работы на компьютере с Windows:/ – camolin3

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