Я следую учебнику для вызова кода Python из программы на C ++ из документы по питону.
Все работает просто отлично при попытке вызвать multiply
пример. Теперь, если я добавлю строку в исходный код Python, импортирующую библиотеку, скажем openpyxl
,
from openpyxl import load_workbook
Я получаю ошибку от python
ImportError: No module named openpyxl
Я думал, если я импортирую системная библиотека, У меня не было бы никаких проблем, но я также получаю ошибку, если я пытаюсь импортировать datetime
,
У меня нет ошибки, если я импортирую файл из консоли Python. openpyxl
библиотека установлена в моей системе.
Итак, мой вопрос: как импортировать исходный код Python, который должен импортировать пакеты?
РЕДАКТИРОВАТЬ: Хорошо, я забыл упомянуть кое-что, я не был полностью честен с вами, извините.
Пытаясь запустить пример, я столкнулся с проблемой: я не мог заставить Python найти мой multiply.py
файл и строка PyImport_Import
всегда возвращайся null
,
Мое решение состояло в том, чтобы добавить путь, по которому я знал, что мой источник Python был с помощью PySys_SetPath
, Проблема в том, что я только что понял, что эта функция не добавляет новый каталог, она просто перезаписывает PYTHONPATH
, Так что теперь Python может найти multiply.py
, но абсолютно все остальное.
Конечно, я удалил эту строку, но теперь у меня есть другой вопрос, почему python не может найти мой источник, если файл находится в том же каталоге скомпилированной программы C ++?
Я понял, что мой sys.path
из моей консоли Python немного отличается от пути, показанного в моем встроенном Python: первый имел в начале списка пустую строку ''
, Я не эксперт по Python, но когда я добавлю эту строку в мой путь, я могу импортировать multiply.py
Похоже, поэтому я не смог импортировать модули, которые были расположены относительно моего исполняемого файла, из-за отсутствия этого пустого пути, но все еще не знаю, что это значит.
Я должен поблагодарить @ paul-evans, которые дали мне идею добавить путь для поиска моих файлов.
Это то, что PYTHONPATH
для. Вы можете установить его как переменную окружения, содержащую каталоги модуля списка, или в самом коде что-то вроде:
import sys
sys.path.append("path/to/openpyxl/module")
Других решений пока нет …