问题标签 [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 - 如何在作为其他 python 文件一部分的 python 文件中调用函数
标题可能不正确,但这是我能想到的最接近的。
我有一个文件sample.py,它就像一个使用argparse制作的命令行解析器。根据参数,它正在调用其他 python 文件。例如 - 在 -C 中编译模块选项。
根据模块名称,配置文件在 module/configuration.py 下
我必须从 configuration.py 文件中调用几个函数。最好的方法是什么。我无法导入 python 文件,因为路径总是会变化,并且需要在运行时导入文件。
有没有办法解决这个问题?
我已阅读有关 importlib 包的信息,但无法让它为我的使用工作。
我的框架结构:
compile.py 文件示例
问题是 module_name 在编译函数中传递,因此我不能在导入中使用。
我的问题可能太长或太明显,但我一直在努力。任何帮助表示赞赏。
python - 在 python 3.4 中从 imp 转换为 importlib 时出现的问题
我制作了一个可以加载插件的 Python 应用程序。这些插件是根据名称和路径加载的。
我目前正在使用
然后以这种方式在模块中获取一个类实例
由于不推荐使用 imp lib,因此我想使用 importlib。获取我的类实例的唯一类似方法是使用
这里奇怪的是(我使用 pyCharm 作为 IDE)。当我在调试模式下运行我的代码时,上面的命令工作正常,我得到了我的类实例。但是运行代码通常会给我以下错误。
为什么运行和调试之间存在差异。有没有另一种方法可以做我想做的事。
我也试过
这也给了我正确的数据但是我不能以这种方式加载模块,或者至少我不知道如何
问候安德斯
python - WebSocket远程接收上的Python模块重新加载
我正在尝试编写一个 python Web 套接字客户端,它可以接收用户生成的脚本并执行它们。
到目前为止,我的代码如下所示:
虽然接收脚本似乎有效(使用文本编辑器查看时会更新 script.py),但以某种方式重新加载和执行新版本不起作用(它总是运行客户端重新/启动时存在的脚本版本或如果脚本顶部的 import 语句被省略,它根本不会运行脚本)。
任何帮助将非常感激。提前致谢。
python - 从字符串中使用 load_dynamic
我正在尝试从字符串加载模块,但它也是一个.so
文件。这有效:
但我想从 Python 字符串加载模块。我尝试使用 read 方法创建一个自定义类并将其传入:
但它告诉我TypeError: must be string, not instance
。所以,它想要一个文件的路径。无论如何我可以制作一个假文件并将其传递给它吗?我愿意使用 python3 或更新的导入模块,importlib
; imp
只是看起来更容易。
这是string_with_read
课程,尽管这种方法目前不起作用。
python - imp.load_source 的问题:“模块”没有属性“foo”
我有一个目录,里面有任意数量的模块,每个模块只包含一个函数do_stuff
。例如:
例如,foo_1.py 可能只是:
从代码的其他地方,我想收集并运行所有do_stuff
函数。我虽然这对imp
模块很容易:
但是,这会导致:
从这里的最佳答案来看,我认为这是要走的路。如果是,也许我的语法是关闭的?毕竟,load_source
真的很宽容:
否则,我还能错过什么?
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 内容?
python - 使用 Pyinstaller 编译后 importlib 找不到模块
我有一个使用 importlib 从另一个脚本(sub_script.py)导入模块的主脚本。我还将参数传递给另一个脚本:
虽然此代码本身运行良好(使用 Python main_script.py),但在我使用 Pyinstaller 编译后它返回以下错误消息:
我尝试过了:
1)__init__.py
在我的文件夹下添加一个
或 2) 将 sub_script.py 移动到 sub_folder 中,__init__.py
但两者都可以。
我也尝试在 Ubuntu 下编译它,但得到了相同的消息。
但是,如果我只使用导入,它就可以正常运行:
有任何想法吗?谢谢!
python-3.x - Python 3 不能使 importlib 与 py2exe 或 cxfreeze 一起工作
当我使用 python 运行它时,我的代码工作正常,但是如果我尝试使用 py2exe 或 cxfreeze importlib 模块不起作用,我一直在寻找一段时间让它工作..
这是我的代码部分不起作用(我 99% 确定它):
这可以通过控制台与 python 一起使用,但在调用 IDMan 后编译时会立即崩溃:
这是因为那部分:
这应该给我一个对象,但在使用 py2exe 或 cxfreeze(甚至 pyinstaller)编译后,它只给了我一个字符串,因为 importlib 不工作我不知道如何解决这个问题..
python-3.x - Python3 - 如何在模块执行之前向模块添加属性?
应用:想象一下金融分析师,快速编写 Python 代码片段,并能够使用方便的金融函数和共享变量,而无需进行任何导入、定义函数或做任何事情。只是他们想要编写的代码的平面源文件,没有别的。
我几乎可以到达那里,通过动态加载源文件作为模块(简单),并将我的函数+变量作为属性添加到加载的模块(更容易)。问题是加载模块会导致模块执行,这为时过早。未定义函数等
Python 3.x 和 PEP 402 引入了模块规范create_module
和exec_module
函数。创建模块,添加属性,然后执行。完美的。除了create_module
被允许返回None
。并浏览 3.5 importlib.abc
、.util
、 和代码, return.machinery
的所有实现。create_module
None
所以我想知道我是否必须编写自己的加载器,和/或导入器,和/或其他东西。顺便说一句,我喜欢添加到模块,而不是添加到builtins
,但如果builtins
有效并且是我唯一的选择,我会这样做。
谢谢!
python - 将 *.py 脚本转换为字符串
我运行了一堆脚本,通常我将它们的结果存储在 MongoDB 中。为了确保可以将结果与输入脚本链接,我将整个脚本存储为文本。使用以下代码片段,这在 Python 3 中运行良好:
在 Python 2 中应用相同的技巧会导致一团糟。最初,变量模块是一个字符串,例如 abfoo。不幸的是,我还不能废除 Python 2。