需要使用 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 中的最后一点。
我正在使用 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 中的最后一点。