嵌入python模块错误

时间:2011-12-13 19:17:27

标签: python file python-module python-c-api

所以我有一个c到python包装器,它接受输入字符串并将它们传递给python函数。我得到的错误是python API无法识别我的python文件...

PyObject *pName, *pModule, *pFunc;
QString pyFile="Test.py";
Py_Initialize();
pName = PyUnicode_FromString(pyFile.toAscii().data());
pModule = PyImport_Import(pName);

错误是“ImportError:没有名为Test.py的模块” 这是当我将Test.py放在与我的项目相同的目录中时

当我将Test.py放在我的目录树中的一个级别时,出现了另一个错误 错误是“不支持按文件名导入”

所以我猜绝对路径不起作用?但在我的例子的第一种情况下,我清楚地将我的Test.py放在与我的项目相同的目录中,为什么我得到错误? python代码是:

import sys
import os

def printFileClass(fileName, className):
    print ("The OMC CORBA File name is ", fileName,"\n")
    print ("The selected Modelica Class is ", className)
    return ("Done operations")


def main():
    print ("Hello! Here is testing script's main \n")



if __name__=='__main__':
main()

2 个答案:

答案 0 :(得分:3)

PYTHONPATH环境变量可用于解决您的问题。

在你的代码中,你可以在Py_Initialize()之前的某个地方执行此操作:

setenv("PYTHONPATH", ".", 0); // #include <stdlib.h> to get the prototype

第三个参数0表示覆盖 - 它为零,因此您也可以从shell传递PYTHONPATH。如果要始终使用编码的路径,可以将其设置为1.

我不确定这不会让你遇到其他问题,但是对于一个简单的测试它可以工作。

此外,请不要在传递给PyImport_Import的模块名称中包含.py扩展名。

我在Linux系统上测试了这个。

答案 1 :(得分:1)

在第一种情况下,没有名为“Test.py”的模块。您的模块在“Test.py”文件中命名为“Test”。尝试导入它。 “Test.py”将是名为“Test”的包中的“py”子模块。