我有两个假设相同的系统。在两个系统上,我运行的是同一个软件,但在两个系统中的一个不能正常工作。在
我试图在用户提供的.py
文件中运行函数。我将其简化为以下基本代码,以重现错误:
import imp
with open("test_scripts/load_offsets.py") as fp:
module = imp.load_source("load_offsets", "test_scripts", fp)
dir(module)
在第一个系统上,输出正确:
^{pr2}$我看到了一个名为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_scriptsc
(这两个系统都是这样)。我认为它包含字节码,但在我看到问题的系统上,我可以识别出文件test_scripts/test_reset_position.py
的部分内容。如果我删除test_scriptsc
,它会再次正常工作,直到加载另一个文件,然后问题再次出现。在
因此,我的结论是,在有问题的系统上,test_scriptsc
文件没有正确更新。但是,我不明白为什么,也不明白为什么问题只出现在两个系统中的一个。我发现这两个系统之间的唯一区别是,有问题的系统在UbuntuLinux16.04.1上运行PythonPython2.7.12,而没有问题的系统在Ubuntu16.04上运行Python2.7.11+。在
有人能帮我弄清楚这是怎么回事吗?我不知道该找什么。。。在
失败的原因是我做错了。
load_source
的第二个参数应该是源文件的完整路径,而不仅仅是指向包含它的目录{a1}。 我不知道我为什么要提出我的实现,也不知道Python2.7.11为什么接受它,但解决方案是以正确的方式来实现:这正确地给出了:
^{pr2}$我认为文件
test_scriptsc
是字节编译.py
文件的一种尝试,但是由于我没有给出完整的路径,我最终得到了某种编译目录。显然,Python2.7.11处理这一问题的方式与Python2.7.12不同。在相关问题 更多 >
编程相关推荐