我importlib对交互式IPython shell中的行为感到困惑.当我跑:
import importlib.reload as ilrel
Run Code Online (Sandbox Code Playgroud)
我收到了错误ImportError: No module named 'importlib.reload'.这正是我导入其他模块的方式,例如matplotlib.pyplot.
目前我一直只是importlib单独导入,然后使用importlib.reload(<module name>).这不是一个主要问题,但为什么第一种方法不起作用?
我有一个在 Jupyter Lab 中运行的 ipython 笔记本。它正在运行一个函数,该函数使用我创建的名为“Myfile.py”的外部模块中的变量。
Myfile.py 包括一些最初定义的变量,如下所示:
Myterms = ['honda accord', 'ferrari', 'mazerati', 'dodge dumpster']
Run Code Online (Sandbox Code Playgroud)
我对中的Myterms列表进行了一些编辑Myfile.py,然后将更改保存到文件中。
Myterms = ['Nissan Leaf', 'Tesla Roadster']
Run Code Online (Sandbox Code Playgroud)
我想要做的是将Myterms列表重新加载Myfile.py到笔记本中,这样当我调用列表中的变量时,它们会反映所做的更改。
我一直在使用此示例中的代码版本:
import myfile
import importlib
def reloader(myfile):
importlib.reload(myfile)
from myfile import Myterms
reloader(myfile)
print(Myterms)
Run Code Online (Sandbox Code Playgroud)
但该行print(myterms)仍然打印出来
['honda accord', 'ferrari', 'mazerati', 'dodge dumpster']
Run Code Online (Sandbox Code Playgroud)
更新:出于某种原因,旧Myterms列表似乎在内存中徘徊,尽管具有该importlib.reload功能,但并未被覆盖。在做了更多研究之后,这个答案可能会提供一些关于原因的线索,但我找不到解决方法。
python ipython python-importlib jupyter-notebook jupyter-lab
我有兴趣加载一个 Python 模块,该模块的源代码嵌入在 C 扩展中。应该可以使用 Python 的importlib机制做一些事情importlib.util.spec_from_file_location,这样在调试时就会出现源代码。我将如何实施importlib.util.spec_from_string?
首先,我知道这之前已经发布过,但是要么 A)建议不起作用,要么 B)建议从命名空间中手动删除模块并像平常一样重新导入它。
我有以下模块结构
basedir/
pytools/
__init__.py
tools.py
setup.py
test.py
Run Code Online (Sandbox Code Playgroud)
如果我在basedir,并导入pytools并创建一个 类 的对象testcls。该类的实际属性可在 中找到tools.py。testcls有一个名为的方法,它现在testfunc就简单地打印出来:AAA
>>> import pytools
>>> test = pytools.testcls()
>>> test.testfunc()
AAA
Run Code Online (Sandbox Code Playgroud)
假设我更改testfunc()为现在打印出来BBB。我这样做,并保存文件。然后我重新加载模块并重试,它没有打印出来BBB:
>>> from importlib import reload
>>> reload(pytools)
>>> test = pytools.testcls()
>>> test.testfunc()
AAA
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行完全相同的过程,但改为更改test.py,将该文件作为模块导入,编辑其中的函数,然后重新加载它,它的行为将按预期进行:
>>> import test
>>> testvariable = test.testcls()
>>> testvariable.testfunc2()
AAA
# Change the function here
>>> from importlib …Run Code Online (Sandbox Code Playgroud) 我在 jupyter 笔记本上导入了 pandas 库,之后出现警告,好像importlib-metadata版本与setuptools. 并建议这个问题很可能通过安装更新版本来解决importlib-metadata。
我已经通过安装更新版本完成了建议importlib-metadata
然后我重新启动内核并运行程序,但仍然出现与以前相同的警告。
这是我做的程序
import pandas as pd
Run Code Online (Sandbox Code Playgroud)
并且出现如下警告:
C:\Users\Asus\Anaconda4\lib\site-packages\setuptools_importlib.py:23: UserWarning:
importlib-metadata版本与setuptools. 通过安装更新版本的importlib-metadata. warnings.warn(msg) # 确保显示描述性消息。
python ×5
ipython ×3
interactive ×1
jupyter-lab ×1
pandas ×1
python-3.x ×1
reload ×1
setuptools ×1