需要使用 Canopy 在 Python 中重新加载库

Need to re-load libraries in Python, with Canopy

我正在使用 Canopy 开发一个 python 项目,使用我自己的库,我不时修改它以更改或添加内部功能。

myfile.py 的开头我有 from my_library import * 但如果我更改此库中的函数并再次计算 myfile.py 它会继续使用我的函数的先前版本。

我尝试了 reload 函数:

import my_library
reload(my_library)
from other_python_file import *
from my_library import *

它使用了我最近更改的库。

但如果是:

import my_library
reload(my_library)
from my_library import *
from other_python_file import *

由于我第一次启动时加载的版本,它给了我结果 myfile.py

为什么第 3 行和第 4 行会出现不同的结果?

没有看到源代码,很难确定。 (为了将来参考,post 一个最小的例子是最有用的,我怀疑在这种情况下大约需要 10 行代码。)

但是根据您对问题的描述,我的猜测是您的 other_python_file 也导入了 my_library。因此,当您执行 from other_python_file import * 时,您还导入了它已经从 my_library 导入的所有内容,在您的第二个示例中,这将覆盖直接从 my_library 导入的内容(因为您没有重新加载 other_python_file,它仍将使用以前版本的 my_library。)

这就是为什么你几乎不应该使用表单 from xxx import * 的原因之一,除非在交互模式下即时使用(即使在交互模式下它也可能很危险但值得权衡方便)。在 python 源文件中,这种做法没有可比的理由。请参阅 Imports section of PEP-8 中的最后一点。