繁体   English   中英

使用新安装的模块而不重新启动交互式会话

[英]Using newly installed modules without restarting an interactive session

在长时间的交互式会话(使用 ipython)期间,我有时需要使用我尚未安装的模块。

安装新模块后,该模块可在新的交互式会话中导入,但不能在安装前运行的会话中导入。 由于我正在使用的内存中的所有变量,我不想重新启动会话......

我怎样才能获得这样一个以前运行的会话来导入新模块?

在 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)

这是python3中顶级模块的一个稍微简单的答案:

# import it to use it
import modulename

# reimport it with importlib
import importlib
print(importlib.reload(__import__("modulename")))

在 python 3.9 上为我工作。 我认为它只会重新导入顶级模块,因此您需要针对子模块的 SourceFileLoader 解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM