在长时间的交互式会话期间(使用ipython),我有时需要使用我尚未安装的模块.
安装新模块后,该模块可在新的交互式会话中导入,但不能在安装之前运行的会话中导入.由于我正在使用的内存中的所有变量,我不想重新启动会话...
如何才能获得此类以前运行的会话以导入新模块?
在 Python 中手动导入内容有两种方法(取决于您的 Python 版本)。
# Python2
import os
os.chdir('/path')
handle = __import__('scriptname') #without .py
handle.func()
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
# Python3.3+
import importlib.machinery
loader = importlib.machinery.SourceFileLoader("namespace", '/path/scriptname.py') #including .py
handle = loader.load_module("namespace")
handle.func()
Run Code Online (Sandbox Code Playgroud)
这在以前版本的 Python3 中工作得有点不同,现在没有时间或权限来安装旧版本,但我记得在尝试导入尤其是重新加载早期版本中的模块时遇到了一些问题。
要重新加载这些模块以防它们发生变化(只是为了详细说明这个答案):
# Python2
reload(handle)
Run Code Online (Sandbox Code Playgroud)
# Python3
import imp
imp.reload(handle)
Run Code Online (Sandbox Code Playgroud)