我似乎无法导入位于“lib-dynload”目录中的任何基本模块。他们都在那里,但我在尝试导入错误时收到错误:"ImportError: No module named X"
。
我检查了我的sys.path
,它包含所有这些模块所在的目录,并且我的PYTHONHOME环境变量设置正确。关于问题可能是什么,我有点不知所措。一些背景信息:这是从Python 2.6.6源代码交叉编译并安装到带有Angstrom的ARM嵌入式Linux板上。
之前它确实有python,我曾尝试将其咬成图像,但它缺少很多东西。在加载到我的交叉编译版本之前,我最终尽力清理与之前的python有关的目录树。
只是尝试导入math
的简单脚本的一小部分:http://pastebin.com/3XgJ3nPR
答案 0 :(得分:2)
我发现该跟踪中没有检查math.so
或mathmodule.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。