标签: python-importlib

在IPython中使用importlib重新加载模块

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>).这不是一个主要问题,但为什么第一种方法不起作用?

python interactive reload ipython python-importlib

2
推荐指数
1
解决办法
2459
查看次数

importlib.reload() 不会将文件重新加载到 ipython 笔记本中

我有一个在 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

2
推荐指数
1
解决办法
2182
查看次数

如何在保留调试的同时从字符串加载 Python 模块?

我有兴趣加载一个 Python 模块,该模块的源代码嵌入在 C 扩展中。应该可以使用 Python 的importlib机制做一些事情importlib.util.spec_from_file_location,这样在调试时就会出现源代码。我将如何实施importlib.util.spec_from_string

python python-importlib

2
推荐指数
1
解决办法
1211
查看次数

重新加载本地模块不起作用

首先,我知道这之前已经发布过,但是要么 A)建议不起作用,要么 B)建议从命名空间中手动删除模块并像平常一样重新导入它。

我有以下模块结构

basedir/
    pytools/
        __init__.py
        tools.py
    setup.py
    test.py
Run Code Online (Sandbox Code Playgroud)

如果我在basedir,并导入pytools并创建一个 类 的对象testcls。该类的实际属性可在 中找到tools.pytestcls有一个名为的方法,它现在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)

python ipython python-3.x python-importlib

1
推荐指数
1
解决办法
3088
查看次数

警告:“importlib-metadata”版本与“setuptools”不兼容

我在 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 setuptools pandas python-importlib

0
推荐指数
1
解决办法
5353
查看次数