Python 无法从嵌入式解释器导入内置模块(仅限Windows)

Python 无法从嵌入式解释器导入内置模块(仅限Windows),python,c++,python-3.x,python-embedding,Python,C++,Python 3.x,Python Embedding,作为一个提醒,这个问题可能看起来是重复的 但我认为我的问题不同。我正在从一个MSVC编译的C++应用程序运行Python 3.4解释器,并且我尝试使用PTVSD模块来调试更容易。到目前为止,我已经能够连接到Python Ipter,我从命令行开始,没有问题,但我想附加到一个嵌入在我的C++应用程序的Python解释器。为了做到这一点,我一直遵循 和 ptvsd模块导入了_socket模块,我可以在C:/Python34/dll中清楚地看到它。如果我从命令行调用python34.exe并运

作为一个提醒,这个问题可能看起来是重复的

但我认为我的问题不同。我正在从一个MSVC编译的C++应用程序运行Python 3.4解释器,并且我尝试使用PTVSD模块来调试更容易。到目前为止,我已经能够连接到Python Ipter,我从命令行开始,没有问题,但我想附加到一个嵌入在我的C++应用程序的Python解释器。为了做到这一点,我一直遵循

ptvsd模块导入了_socket模块,我可以在C:/Python34/dll中清楚地看到它。如果我从命令行调用python34.exe并运行

import ptvsd
ptvsd.enable_attach(None)
我可以通过查看tcp://localhost:5678.

然而,如果我打电话

PyRun_SimpleString("import ptvsd");
<>从C++中,我发现一个错误,不能找到“子套接字”模块。同样的道理,对于将任何内置的Python模块导入到我的C++应用程序中,似乎都是正确的,尽管我能够从命令行调用的Python解释器正确导入它们。 我能执行

PyRun_SimpleString("import sys \n print(sys.path)");
从我的C++应用程序中,结果显示了C//Python 34/DLL,其中,SooCKET.Pyd文件位于其中。但由于某些原因,当我尝试导入它或导入ptvsd时,无法拾取它

我听从了他的建议,跑了

这是我真的不明白的命令。它实际上使_-socket未被发现的错误消失了,但我认为它只是抑制了它。召唤

dir(ptvsd)
从python显示其功能,但调用

PyRun_SimpleString("print(dir(ptvsd))");
没有。我发布的第一个SO链接涉及一个手工构建的模块,interpeter无法获取该模块,但这里的情况并非如此。该模块位于PYTHONPATH可以找到它的位置,并且可以通过命令行很好地获取它(它也可以通过用于VisualStudioIDE的Python工具获取,但这不是重点。)

我无法在Windows上检查Python 2.7,但是在Linux Python(2和3)上没有麻烦从C++解释器导入“SoSoT模块”,所以我希望它只是一个环境问题。 此外,输出

print(sys.version)

从命令行,以及

3.4.3 (default, Aug 29 2015, 22:43:06) [MSC v.1800 32 bit (Intel)]
<>从我的C++解释器。 很抱歉,但是有人知道出了什么问题吗?我肯定我还需要经历一些其他的困难才能让事情顺利进行,但我还不知道它们是什么

无论如何,我可以很好地导入sys和math。我还可以导入一个自定义模块,通过

PyImport_AppendInittab(ModuleName.c_str(), _Mod_Init);
我已经试过了所有的测试,不管有没有上面的电话

谢谢你抽出时间

  • 约翰
3.4.3 (default, Aug 29 2015, 22:43:06) [MSC v.1800 32 bit (Intel)]
PyImport_AppendInittab(ModuleName.c_str(), _Mod_Init);