交叉编译的Python无法找到基本模块(数学,运算符等)

时间:2011-05-08 03:31:34

标签: python linux embedded cross-compiling

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

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

之前它确实有python,我曾尝试将其咬成图像,但它缺少很多东西。在加载到我的交叉编译版本之前,我最终尽力清理与之前的python有关的目录树。

只是尝试导入math的简单脚本的一小部分:http://pastebin.com/3XgJ3nPR

2 个答案:

答案 0 :(得分:2)

我发现该跟踪中没有检查math.somathmodule.so等文件名,这可能表明共享对象模块已完全关闭 - 您编译的Python版本无法动态加载二进制模块

更多:从我最近的Python构建中查看config.out,我看到Python正在研究的几行是否会让它动态加载以{{结尾的二进制模块1}}:

.so

这些行在您的交叉编译中说了什么?

答案 1 :(得分:0)

我最近遇到了构建Python 2.7.13的类似问题,我相信它是this bug,它已针对Python 3修复但未移植回2.构建过程(setup.py)生成要构建的模块列表,然后减去内置模块列表(sys.builtin_module_names);然而,setup.py是使用python2.7运行的(来自Makefile),在我的情况下,它选择系统(Ubuntu)二进制而不是内置的二进制文件,因此它减去了内置的系统python模块(包括运算符和集合)但不适用于正在构建的那个,因此它们既不是内置的,也不是作为外部模块构建的。

我能够使用bug中的建议,并在源目录中将构建的python添加到路径中(并从python2.7添加符号链接 - > python)。这是因为我在多拱x64机器上构建x86 python;如果你正在构建像ARM这样的另一个系统,你可能需要应用bug中的补丁来获取构建过程早期的内置模块列表,而不是主机python。