在长时间的互动环节(使用ipython)中,我有时需要使用我尚未安装的模块。
安装新模块后,该模块可在新的交互式会话中导入,但不能在安装之前运行的会话中导入。由于我正在使用的内存中的所有变量,我不想重启会话...
如何让以前运行的会话导入新模块?
答案 0 :(得分:2)
有两种方法可以在Python中手动导入内容(取决于你的python版本)。
# Python2
import os
os.chdir('/path')
handle = __import__('scriptname') #without .py
handle.func()
或者你可以这样做:
# Python3.3+
import importlib.machinery
loader = importlib.machinery.SourceFileLoader("namespace", '/path/scriptname.py') #including .py
handle = loader.load_module("namespace")
handle.func()
这在以前版本的Python3中有点不同,现在没有时间或访问权限来安装旧版本,但我确实记得在尝试导入时遇到一些问题,尤其是在早期版本中重新加载模块。
要重新加载这些模块以防它们发生变化(只是为了详细说明这个答案):
# Python2
reload(handle)
# Python3
import imp
imp.reload(handle)
答案 1 :(得分:0)
对于python3中的顶级模块,这是一个稍微简单的答案:
# import it to use it
import modulename
# reimport it with importlib
import importlib
print(importlib.reload(__import__("modulename")))
在python 3.9上为我工作。我认为它只会重新导入顶级模块,因此您需要针对子模块的SourceFileLoader解决方案。