问题标签 [python-importlib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
168 浏览

python - Python3:通过以编程方式从另一个文件添加函数来划分大类

注意:这个问题是对从其他文件添加函数到 Python 类的修改/扩展。这部分是因为imp已弃用。

上下文:我有一个大类文件(+5000 行),比如说MainClass.py。为了更好地划分我的代码,我想将相关函数移动到单独的子文件中,例如所需的目录结构可能类似于:

我希望能够加载这些函数并将它们添加到MainClass

目前我有:

但这会吐一个ImportError, 'main_class_functions_1' is not a package

(我还从链接的帖子中复制粘贴了代码,并试图查看它是否有效,但它没有)。

0 投票
3 回答
1033 浏览

python - 如何使用 importlib 加载带有自定义全局变量的 Python 模块?

我正在尝试在 Python 中构建一个小型构建系统,为我的 C++ 项目生成 Ninja 文件。它的行为应该类似于 CMake;也就是说,一个bldfile.py脚本定义了规则和目标,并通过调用可选地递归到一个或多个目录中bld.subdir()。每个bldfile.py脚本都有一个对应的bld.File对象。执行bldfile.py脚本时,bld应将全局预定义为该文件的bld.File实例,但仅在该模块的范围内

此外,我想以某种方式利用 Python 的字节码缓存,但.pyc文件应该存储在构建输出目录中,而不是脚本__pycache__旁边的目录中。bldfile.py

我知道我应该使用importlib(需要 Python 3.4+ 就可以了),但我不确定如何:

  1. 使用自定义全局变量加载并执行模块文件。
  2. 重用字节码缓存基础设施。

任何帮助将不胜感激!

0 投票
1 回答
1978 浏览

python - Python:从名称为变量的文件中导入函数

我有一个./model_scripts/medians.py包含函数的文件predict_volume()。[tree下面给出的 bash 终端中的输出]

我需要将此函数导入另一个 python 脚本,其中必须从中导入函数的 python 脚本的名称(即medians.py)是字符串变量的形式。我写的代码是:

但我在第一行收到以下错误:

在阅读其他答案(此处)后,我__init__.pymodel_scripts目录中添加了一个。但我仍然收到上述错误。

这个答案建议使用importlib

希望对为什么第一种方法不起作用但第二种方法起作用的任何见解。

0 投票
1 回答
2557 浏览

python - 如何使用 importlib.LazyLoader?

在我的模块中,我有几个函数依赖于一个启动时间很长的外部模块。我该如何使用LazyLoader?如果我有

或者

或者

我将如何替换这些语句以LazyLoader将模块内容的执行推迟到需要时使用?

从文档中如何使用它并不是很明显。没有示例,并且nullege 代码搜索仅提供 Python 本身包含的单元测试。

0 投票
2 回答
1245 浏览

python - 在 importlib.reload 之前更改环境变量

我有一个在静态初始化期间加载环境变量的 c 扩展。我需要能够更改这些值并重新加载模块(我无法更改它们是静态加载的事实)。我试过设置os.environ,但似乎没有类似的env选项importlibsubprocess.call

这是一个例子:假设我有一个定义如下的模块

我有python代码:

换句话说,我能做些什么而不是os.environ['HOME'] = 'foo'导致环境变量在 c 模块中发生变化?

注意:我不能使用setenv,因为变量是静态加载的,我无法重新初始化所有依赖它们的东西。

0 投票
1 回答
613 浏览

python - 在 Python 中重新加载内置函数

我正在探索 Python 中命名空间的概念,但我无法解释以下内容:重新加载builtins并不能有效地重新加载模块。这是一个例子:

其中 mymodule 仅包含 assignment x = 5。输出是:

也许这是一个愚蠢的问题,但这种行为的原因是什么?

0 投票
1 回答
347 浏览

python - 如何在python中动态导入`import xyz as z`

去做

动态地,我可以执行以下操作

但是我应该怎么做才能动态地执行以下操作

问题背景:

我需要导入模块的不同版本(0.10)(在我的情况下为“pika”),安装在单独的目录中,而不是默认版本(0.9)。

正如我们所见,常规导入工作正常。但是,在动态导入时,相对于位置的导入会导致问题。根据importlib.import_module 文档,以下应该可以工作,但不能。

当尝试从相对路径导入“pika”时,由于相对路径下没有模块 pika,它应该会失败,它仍然是从默认模块导入它。

我错过了什么?我主要想动态地做以下事情。

0 投票
0 回答
114 浏览

python - importlib.reload 不会重新加载 pip 安装的模块

似乎 importlib 不愿意重新加载重新安装的模块

然后,去编辑 [my_pip_installable] 中的 [my_code] 并推送到 github。在另一个控制台中升级软件包。

...在原始解释器中

有没有办法重新加载非本地模块?

0 投票
2 回答
9473 浏览

python - 如何实现一个可以使用 importlib 即时修改源代码的导入钩子?

使用不推荐使用的模块imp,我可以编写一个自定义导入钩子,在 Python 导入/执行之前动态修改模块的源代码。给定源代码作为source下面命名的字符串,创建模块所需的基本代码如下:

由于imp已弃用,我想对importlib. imp[编辑:需要替换其他方法来构建自定义导入挂钩 - 所以我正在寻找的答案不仅仅是替换上面的代码。]

但是,我无法弄清楚如何做到这一点。importlib文档具有从“规范”创建模块的功能,据我所知,这些是包含自己的加载器的对象,没有明显的方法来重新定义它们以便能够从字符串创建模块。

我创建了一个最小的示例来演示这一点;有关详细信息,请参阅自述文件。

0 投票
2 回答
1782 浏览

python - 酸洗使用 importlib.util 导入的对象

我在使用 Python 的 pickle 时遇到了问题。我需要通过将文件路径提供给 importlib.util 来加载一些 Python 模块,如下所示:

我想从加载的模块中实例化一些对象并将它们序列化以供以后使用,但是当我尝试时:

我明白了: _pickle.PicklingError: Can't pickle : import of module 'custom' failed

如果我尝试腌制通过 import 语句导入的对象,则不会发生这种情况。我怎样才能绕过这个?