交叉编译的Python找不到基本的模块(math,运算符等)

我似乎无法导入位于“lib-dynload”目录中的任何基本模块。 他们都在那里,但是当试图导入它们时,我得到错误: "ImportError: No module named X"

我检查了我的sys.path ,它包含了所有这些模块所在的目录,并且我的PYTHONHOME环境variables设置正确。 我对这个问题可能会有点不知所措。 一些背景信息:这是从Python 2.6.6源代​​码交叉编译,并安装到Angstrom的ARMembedded式Linux板上。

它之前有python,我试图把它烧成图像,但是它缺less很多东西。 我最终在我的交叉编译版本上加载之前,尽我所能清理任何与前面的python有关的目录树。

一个简单的脚本,只是试图导入math strace: http : //pastebin.com/3XgJ3nPR

我发现没有在这个跟踪文件中检查像math.somathmodule.so这样的文件名,这可能表明共享对象模块被完全关闭了 – 你编译的Python版本不能动态加载二进制模块。

更多:从我最近的Python构建中查看config.out ,我看到了几行Python在调查平台是否让它动态加载以.so结尾的二进制模块:

 checking for dlopen... yes checking DYNLOADFILE... dynload_shlib.o checking MACHDEP_OBJS... MACHDEP_OBJS 

这些线在你的交叉编译上说了些什么?

我最近运行了一个构建Python 2.7.13的类似问题,我相信这个bug正在为Python 3修复,但不会移植回2.构建过程(setup.py)会生成一个模块列表,然后减去内置模块列表( sys.builtin_module_names ); 然而,使用python2.7 (在Makefile中)运行setup.py,在我的情况下,它使用了系统(Ubuntu)二进制文件,而不是构建的系统文件,所以它会从系统python中减去内置的模块(包括操作员和集合),但不是正在构建的,所以它们既不是内置的也不是作为外部模块构建的。

我能够使用bug的建议,并在源代码目录中预先构建的python路径(并从python2.7 – > python添加符号链接)。 这工作,因为我在一个多弓x64机器上构建一个x86 python; 如果您正在构建另一个像ARM这样的系统,则可能需要应用该bug中的修补程序才能从构建过程的早期版本获取内置模块列表,而不是主机python。