我有两个所谓的相同的系统。在两个系统上,我都运行相同的软件,但在其中一个上,它不能正常工作。imp.load_source加载错误的模块
我试图在用户提供的.py
文件中运行函数。我已经减少这再现错误以下基本代码:
import imp
with open("test_scripts/load_offsets.py") as fp:
module = imp.load_source("load_offsets", "test_scripts", fp)
dir(module)
在第一个系统中,输出是正确的:
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'os', 'test_load_offsets']
我看到一个名为test_load_offsets
一个功能,符合市场预期。
在第二个系统,我得到下面的输出:
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'test_reset_position']
请注意,我现在看到不同的功能:test_reset_position
。但是,在这两个系统上,文件test_scripts/load_offsets.py
完全相同!更重要的是,在这个文件中没有功能test_reset_position
。
但是,有一个功能test_reset_position
在不同的文件,即test_scripts/reset_position.py
。另外,在我执行代码示例的目录中,有一个文件test_scriptsc
(这两种系统都是这种情况)。它包含我认为的字节码,但在我看到问题的系统上,我可以识别其中的文件test_scripts/test_reset_position.py
的一部分。如果我删除test_scriptsc
,它再次正常工作,直到加载一个不同的文件,然后问题再次开始。
所以,我的结论是,在有问题的系统上,文件test_scriptsc
没有正确更新。但是,我不明白为什么,也不明白为什么问题只出现在两个系统中的一个系统上。我可以在两个系统之间找到的唯一区别是,有问题的系统在Ubuntu Linux 16.04.1上运行Python Python 2.7.12,而没有问题的系统在Ubuntu 16.04上运行Python 2.7.11+。
有人能帮我找出这里发生了什么吗?我不知道要寻找什么......
如果您查看两个系统上“module .__ file__”的值,您会得到什么结果? – BrenBarn
对于两个系统'module .__ file__'都是'test_scriptsc'。 – Ludo