问题标签 [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 投票
1 回答
105 浏览

python - 如何在作为其他 python 文件一部分的 python 文件中调用函数

标题可能不正确,但这是我能想到的最接近的。

我有一个文件sample.py,它就像一个使用argparse制作的命令行解析器。根据参数,它正在调用其他 python 文件。例如 - 在 -C 中编译模块选项。

根据模块名称,配置文件在 module/configuration.py 下

我必须从 configuration.py 文件中调用几个函数。最好的方法是什么。我无法导入 python 文件,因为路径总是会变化,并且需要在运行时导入文件。

有没有办法解决这个问题?

我已阅读有关 importlib 包的信息,但无法让它为我的使用工作。

我的框架结构:

compile.py 文件示例

问题是 module_name 在编译函数中传递,因此我不能在导入中使用。

我的问题可能太长或太明显,但我一直在努力。任何帮助表示赞赏。

0 投票
1 回答
1671 浏览

python - 在 python 3.4 中从 imp 转换为 importlib 时出现的问题

我制作了一个可以加载插件的 Python 应用程序。这些插件是根据名称和路径加载的。

我目前正在使用

然后以这种方式在模块中获取一个类实例

由于不推荐使用 imp lib,因此我想使用 importlib。获取我的类实例的唯一类似方法是使用

这里奇怪的是(我使用 pyCharm 作为 IDE)。当我在调试模式下运行我的代码时,上面的命令工作正常,我得到了我的类实例。但是运行代码通常会给我以下错误。

为什么运行和调试之间存在差异。有没有另一种方法可以做我想做的事。

我也试过

这也给了我正确的数据但是我不能以这种方式加载模块,或者至少我不知道如何

问候安德斯

0 投票
1 回答
69 浏览

python - WebSocket远程接收上的Python模块重新加载

我正在尝试编写一个 python Web 套接字客户端,它可以接收用户生成的脚本并执行它们。

到目前为止,我的代码如下所示:

虽然接收脚本似乎有效(使用文本编辑器查看时会更新 script.py),但以某种方式重新加载和执行新版本不起作用(它总是运行客户端重新/启动时存在的脚本版本或如果脚本顶部的 import 语句被省略,它根本不会运行脚本)。

任何帮助将非常感激。提前致谢。

0 投票
0 回答
306 浏览

python - 从字符串中使用 load_dynamic

我正在尝试从字符串加载模块,但它也是一个.so文件。这有效:

但我想从 Python 字符串加载模块。我尝试使用 read 方法创建一个自定义类并将其传入:

但它告诉我TypeError: must be string, not instance。所以,它想要一个文件的路径。无论如何我可以制作一个假文件并将其传递给它吗?我愿意使用 python3 或更新的导入模块,importlib; imp只是看起来更容易。

这是string_with_read课程,尽管这种方法目前不起作用。

0 投票
1 回答
922 浏览

python - imp.load_source 的问题:“模块”没有属性“foo”

我有一个目录,里面有任意数量的模块,每个模块只包含一个函数do_stuff。例如:

例如,foo_1.py 可能只是:

从代码的其他地方,我想收集并运行所有do_stuff函数。我虽然这对imp模块很容易:

但是,这会导致:

这里的最佳答案来看,我认为这是要走的路。如果是,也许我的语法是关闭的?毕竟,load_source真的很宽容:

否则,我还能错过什么?

0 投票
0 回答
1234 浏览

python - 如何导入给定完整​​路径的包?

我的问题类似于如何在给定完整路径的情况下导入模块?但是我不是在导入 .py 源文件,而是在导入带有 .pyd 的包。

在运行时,我正在从一些动态生成的 c 代码创建新的包模块。我成功地生成了包 Foo ,其中包含一个__init__.py文件和一个mod.pyd

我正在使用的示例代码是

如果我尝试使用pydspec_from_file_location('foo.bar', '/a/temp/dir/foo/__init__.py')中的模块bar无法加载。

如果我尝试使用spec_from_file_location('foo.bar', '/a/temp/dir/foo/')spec_from_file_location返回None.

如果我尝试使用spec_from_file_location('foo.bar', '/a/temp/dir/foo/bar.pyd'),则会收到以下错误堆栈:

推荐的 4 行 importlib 解决方案的替代方案是为MetaPathFinder和创建具体类SourceLoader。我的以下MetaPathFinder工作正常,但是,我不确定如何Loader正确实施。get_data返回值需要一些 Python 代码的 Unicode 表示。如何在加载器中返回包结构或 pyd 内容?

0 投票
1 回答
3742 浏览

python - 使用 Pyinstaller 编译后 importlib 找不到模块

我有一个使用 importlib 从另一个脚本(sub_script.py)导入模块的主脚本。我还将参数传递给另一个脚本:

虽然此代码本身运行良好(使用 Python main_script.py),但在我使用 Pyinstaller 编译后它返回以下错误消息:

我尝试过了:

1)__init__.py在我的文件夹下添加一个

或 2) 将 sub_script.py 移动到 sub_folder 中,__init__.py 但两者都可以。

我也尝试在 Ubuntu 下编译它,但得到了相同的消息。

但是,如果我只使用导入,它就可以正常运行:

有任何想法吗?谢谢!

0 投票
1 回答
145 浏览

python-3.x - Python 3 不能使 importlib 与 py2exe 或 cxfreeze 一起工作

当我使用 python 运行它时,我的代码工作正常,但是如果我尝试使用 py2exe 或 cxfreeze importlib 模块不起作用,我一直在寻找一段时间让它工作..

这是我的代码部分不起作用(我 99% 确定它):

这可以通过控制台与 python 一起使用,但在调用 IDMan 后编译时会立即崩溃:

这是因为那部分:

这应该给我一个对象,但在使用 py2exe 或 cxfreeze(甚至 pyinstaller)编译后,它只给了我一个字符串,因为 importlib 不工作我不知道如何解决这个问题..

0 投票
0 回答
95 浏览

python-3.x - Python3 - 如何在模块执行之前向模块添加属性?

应用:想象一下金融分析师,快速编写 Python 代码片段,并能够使用方便的金融函数和共享变量,而无需进行任何导入、定义函数或做任何事情。只是他们想要编写的代码的平面源文件,没有别的。

我几乎可以到达那里,通过动态加载源文件作为模块(简单),并将我的函数+变量作为属性添加到加载的模块(更容易)。问题是加载模块会导致模块执行,这为时过早。未定义函数等

Python 3.x 和 PEP 402 引入了模块规范create_moduleexec_module函数。创建模块,添加属性,然后执行。完美的。除了create_module被允许返回None。并浏览 3.5 importlib.abc.util、 和代码, return.machinery的所有实现。create_moduleNone

所以我想知道我是否必须编写自己的加载器,和/或导入器,和/或其他东西。顺便说一句,我喜欢添加到模块,而不是添加到builtins,但如果builtins有效并且是我唯一的选择,我会这样做。

谢谢!

0 投票
2 回答
375 浏览

python - 将 *.py 脚本转换为字符串

我运行了一堆脚本,通常我将它们的结果存储在 MongoDB 中。为了确保可以将结果与输入脚本链接,我将整个脚本存储为文本。使用以下代码片段,这在 Python 3 中运行良好:

在 Python 2 中应用相同的技巧会导致一团糟。最初,变量模块是一个字符串,例如 abfoo。不幸的是,我还不能废除 Python 2。