【发布时间】:2014-01-30 01:54:37
【问题描述】:
我正在按照教程从 the python docs 的 C++ 程序中调用 python 代码。
尝试调用multiply 示例时一切正常。现在,如果我在导入库的 python 源代码中添加一行,比如说openpyxl,
from openpyxl import load_workbook
我收到来自 python 的错误
ImportError: No module named openpyxl
我认为如果我导入一个系统库,我不会有任何问题,但如果我尝试导入datetime,我也会收到错误。
如果我从 python 控制台导入文件,我没有任何错误。 openpyxl 库已安装在我的系统中。
所以我的问题是:如何导入需要导入包的python源代码?
编辑:好的,我忘了提一些事情,我对你们没有完全诚实,对不起。
尝试运行示例时遇到问题:我无法让 python 找到我的multiply.py 文件,并且PyImport_Import 行总是返回null。
我的解决方案是使用PySys_SetPath 添加我知道我的python 源的路径。问题是我刚刚意识到这个函数不会追加一个新目录,它只是覆盖了PYTHONPATH。所以现在python可以找到multiply.py,但绝对是别的。
当然我已经删除了那行但现在我有另一个问题,如果文件只是在 C++ 编译程序的同一目录中,为什么 python 找不到我的源?
我意识到我的python控制台中的sys.path与我的嵌入式python中显示的路径有点不同:第一个在列表的开头有一个空字符串@987654335 @。我不是 python 专家,但是当我将该行添加到我的路径时,我可以导入 multiply.py 所以这似乎是我无法导入相对于我的可执行文件的模块的原因是缺少这个空路——但还是不知道是什么意思——。
我要感谢@paul-evans,他给了我添加路径以查找我的文件的想法。
【问题讨论】:
-
您的系统上是否安装了多个版本的python?
-
我有 python 2.7、python 3 和 python 3.3。我很确定我通过调用
PyRun_SimpleString("import sys\nprint(sys.version)");使用的是 2.7 版本 -
PYTHONPATH变量只能在site.py中读取,因此如果由于某种原因您的解释器没有读取此文件,您的PYTHONPATH将被忽略。
标签: python c++ c python-import python-embedding