问题标签 [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.
python - Python3:通过以编程方式从另一个文件添加函数来划分大类
注意:这个问题是对从其他文件添加函数到 Python 类的修改/扩展。这部分是因为imp
已弃用。
上下文:我有一个大类文件(+5000 行),比如说MainClass.py
。为了更好地划分我的代码,我想将相关函数移动到单独的子文件中,例如所需的目录结构可能类似于:
我希望能够加载这些函数并将它们添加到MainClass
目前我有:
但这会吐一个ImportError
, 'main_class_functions_1' is not a package
。
(我还从链接的帖子中复制粘贴了代码,并试图查看它是否有效,但它没有)。
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+ 就可以了),但我不确定如何:
- 使用自定义全局变量加载并执行模块文件。
- 重用字节码缓存基础设施。
任何帮助将不胜感激!
python - 如何使用 importlib.LazyLoader?
在我的模块中,我有几个函数依赖于一个启动时间很长的外部模块。我该如何使用LazyLoader
?如果我有
或者
或者
我将如何替换这些语句以LazyLoader
将模块内容的执行推迟到需要时使用?
从文档中如何使用它并不是很明显。没有示例,并且nullege 代码搜索仅提供 Python 本身包含的单元测试。
python - 在 importlib.reload 之前更改环境变量
我有一个在静态初始化期间加载环境变量的 c 扩展。我需要能够更改这些值并重新加载模块(我无法更改它们是静态加载的事实)。我试过设置os.environ
,但似乎没有类似的env
选项importlib
subprocess.call
这是一个例子:假设我有一个定义如下的模块
我有python代码:
换句话说,我能做些什么而不是os.environ['HOME'] = 'foo'
导致环境变量在 c 模块中发生变化?
注意:我不能使用setenv
,因为变量是静态加载的,我无法重新初始化所有依赖它们的东西。
python - 在 Python 中重新加载内置函数
我正在探索 Python 中命名空间的概念,但我无法解释以下内容:重新加载builtins
并不能有效地重新加载模块。这是一个例子:
其中 mymodule 仅包含 assignment x = 5
。输出是:
也许这是一个愚蠢的问题,但这种行为的原因是什么?
python - 如何在python中动态导入`import xyz as z`
去做
动态地,我可以执行以下操作
但是我应该怎么做才能动态地执行以下操作
问题背景:
我需要导入模块的不同版本(0.10)(在我的情况下为“pika”),安装在单独的目录中,而不是默认版本(0.9)。
正如我们所见,常规导入工作正常。但是,在动态导入时,相对于位置的导入会导致问题。根据importlib.import_module 文档,以下应该可以工作,但不能。
当尝试从相对路径导入“pika”时,由于相对路径下没有模块 pika,它应该会失败,它仍然是从默认模块导入它。
我错过了什么?我主要想动态地做以下事情。
python - importlib.reload 不会重新加载 pip 安装的模块
似乎 importlib 不愿意重新加载重新安装的模块
然后,去编辑 [my_pip_installable] 中的 [my_code] 并推送到 github。在另一个控制台中升级软件包。
...在原始解释器中
有没有办法重新加载非本地模块?
python - 如何实现一个可以使用 importlib 即时修改源代码的导入钩子?
使用不推荐使用的模块imp
,我可以编写一个自定义导入钩子,在 Python 导入/执行之前动态修改模块的源代码。给定源代码作为source
下面命名的字符串,创建模块所需的基本代码如下:
由于imp
已弃用,我想对importlib
. imp
[编辑:需要替换其他方法来构建自定义导入挂钩 - 所以我正在寻找的答案不仅仅是替换上面的代码。]
但是,我无法弄清楚如何做到这一点。importlib文档具有从“规范”创建模块的功能,据我所知,这些是包含自己的加载器的对象,没有明显的方法来重新定义它们以便能够从字符串创建模块。
我创建了一个最小的示例来演示这一点;有关详细信息,请参阅自述文件。
python - 酸洗使用 importlib.util 导入的对象
我在使用 Python 的 pickle 时遇到了问题。我需要通过将文件路径提供给 importlib.util 来加载一些 Python 模块,如下所示:
我想从加载的模块中实例化一些对象并将它们序列化以供以后使用,但是当我尝试时:
我明白了: _pickle.PicklingError: Can't pickle : import of module 'custom' failed
如果我尝试腌制通过 import 语句导入的对象,则不会发生这种情况。我怎样才能绕过这个?