问题标签 [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 回答
6288 浏览

python-3.x - 序列化由importlib导入的dict时无法腌制/莳萝SwigPyObject

我尝试序列化(莳萝)一个包含嵌套在字典内的可莳萝对象的列表。dict 本身使用 importlib 导入到我的主脚本中。跟注dill.dump()加注TypeError: can't pickle SwigPyObject objects. 这是一些我设法重现错误以获得更多洞察力的代码。

some_config.py 位于 config/some_config.py 下:

这是导入配置并尝试莳萝 config["features"] 的代码:

现在让我想知道的部分:使用 importlib 导入 config-dict 时会引发错误,经过一些调试后,我发现不仅如此,config["features"]而且config["optimizer"]还会被删除。但是,使用 normalimport似乎有效,它只尝试 dillconfig["features"] 所以我的问题是,如果 dill 是由 importlib 而不是仅导入功能列表,为什么 dill 会尝试序列化整个 dict 以及如何修复此错误?

0 投票
1 回答
78 浏览

python - Differentiating between a python sibling import vs importing a function/class

I'm writing a pylint checker and I need to differentiate between an import that is a sibling import of a package and an import of a function or class.

Example of sibling import:

Example of a function import:

The latter example I want to flag, while the former I want to allow, so I need to be able to tell the difference between the two.

I'm currently using:

That returns a ModuleSpec, but I'm unclear how I can get to the goal of identifying the import array as a module vs. a function/class. In this example it is a function import, and thus should be flagged.

0 投票
0 回答
27 浏览

python - 来自两个不同导入的 __class__ 相等性检查

我在我的 python 软件项目中有一个相当复杂的导入设置,我没有绕过使用 importlib 动态导入一些模块。因此,我遇到了我有两个相同类的对象的情况,但是由于它们是独立加载的,所以它们之间的相等性检查给了我False.

它们对每个对象的字符串表示形式obj.__class__看起来相同: <class 'drivers.MongoDriver'>vs <class 'drivers.MongoDriver'>__eq__不过,对两个类、issubclass__eq__ontype()isinstancefail进行平等检查。

我可以想到一种通过比较仍然进行相等检查的hacky方法repr(obj.__class__),但这看起来并不那么好。另一种解决方案是“隐藏”指定某个唯一类 ID 的属性。

是否有另一种(更好的)方法如何在两个基本相同但已importlib独立加载的类之间进行相等检查?

编辑:重要:我不是在寻找避免两次导入类的方法。我的项目的一些模块是有意动态重新导入的,以考虑运行时这些模块中的代码更改。然后这些模块再次导入其他模块,例如我想要进行相等性检查的驱动程序。尽管不必重新导入更改模块使用的那些不变模块会很好,但我知道每当我动态导入一个模块时,所有依赖项也会重新导入。(如果您有关于如何重新导入模块 A 的解决方案,该模块 A 本身具有(静态)导入 B,但不必将 B 与 A 一起重新导入,我会很高兴。但这不是我要问/寻找的直接内容为了。)

0 投票
2 回答
4778 浏览

python-3.x - 从字符串导入lib.reload模块?

我想用来importlib重新加载一个名称是动态生成的模块。

例子:

现在如何sys使用变量重新加载模块want_reload?我不能直接提供它,importlib.reload()因为它说它需要一个模块,而不是 str。

如果提供无效字符串或未加载的模块会更好,例如"........",它会引发异常。

0 投票
1 回答
100 浏览

python - 从模块中导入特定类型的所有元素

我想在模块中导入仅属于特定类型的对象。

例如要导入的模块是:

现在我想Afoo(即a)导入类型的元素。

显然,您可以导入所有foo然后遍历它以检查类型。不过,我认为这并不理想。

也许有什么importlib可以促进这一点?

编辑

(添加有关用例的更多信息。)

基本上,我正在尝试创建类似IPython 魔术的东西,并希望为自定义魔术创建一个工具。

用户将使用装饰器在文件中注册函数,该装饰器将返回特定类型的实例。

然后,用户将在实例化时传递模块的路径。

然后会发生这样的事情:

用户实际上不会调用GetsRegisteredKeys. 他们只是通过其他地方的路径。

欢迎完全避免这种导入的替代设计。

0 投票
1 回答
259 浏览

python - 重新加载其他模块中导入的子模块

我有以下问题,我将分享四个不同的 .py 文件以更好地解释自己。我正在运行来自 spyder(不是 jupyter)python 3.4 的代码。我有一个主脚本“master001.py”,我从中执行代码。它看起来像这样:

master001.py 调用 child001.py 进行简单的计算:

然后,master001.py 调用 child002.py 在其中执行另一个简单的计算:

到目前为止,一切都很好。最后,我有 child003.py。在这个模块中,我执行一个实际从 child002.py 导入的计算

正如您从运行 master001.py 中看到的那样,当我使用重新加载calculation_two 时

这适用于calculation_tworun from child002.py,但它不会重新加载calculation_twoby 调用child003.py

更具体地说,如果您master001.py在手动输入任何内容之前运行并更改 的内容calculation_two,那么当您被问到时

你输入N,当你被问到

你输入Y,你会看到child003.py不反映新更新代码的返回值。

我阅读了如何卸载(重新加载)Python 模块?以及如何重新加载使用 `from module import *` 导入的 python 模块,它们非常有帮助,但我找不到解决这个特定问题的方法。

0 投票
2 回答
1036 浏览

django - 独角兽无法启动

好的,我正在尝试使用 gunicorn 运行 django 应用程序,但似乎没有任何效果,我的应用程序文件夹结构如下所示:

appenv包含我的虚拟环境,在dtest 中我有文件wsgi.py,其中包含:

然后我尝试像这样运行 gunicorn:

但我得到了错误:

然后gunicorn死了......它一定是我的模块被导入的方式,但我不确定它到底是什么(也许正在修改sys.modules?)

我在dietpi(debian 8 Jessie)上使用Django 2.0.9版、gunicorn(19.9.0版)、Python 3.4.2。

[顺便说一句,运行 python manage.py runserver 工作正常]

0 投票
1 回答
819 浏览

python - 如何动态导入具有超时的不安全 Python 模块?

我需要动态加载几个可能不安全的模块以进行测试。

关于安全性,我的脚本由低访问权限用户执行。

虽然,我仍然需要一种优雅地使导入过程超时的方法,因为我不能保证模块脚本会终止。例如,它可能包含调用input或无限循环。

我目前正在使用Thread.joina timeout,但这并不能完全解决问题,因为脚本在后台仍然存在并且没有办法杀死线程。

如何导入模块,但None如果脚本超时则返回?

0 投票
1 回答
175 浏览

python - 不使用 imp.load_source 从文件中获取 __version__ 值?

我之前已经完成了以下操作来获取版本字符串:

现在,什么时候imp在 Python 3 中被弃用(我在 3.7.1 上),什么是一个很好的替代品load_source,只需要 std 库?

这对我来说似乎有点令人费解,load_module实际上已被弃用:

编辑#1:

这在导入任意 python 源文件中进行了讨论。(Python 3.3+)和出现的解决方案之一是:

0 投票
2 回答
586 浏览

python - Python 烧瓶应用程序在启动 ImportError 时抛出以下错误:不支持按文件名导入

在安装所有要求并通过以下方式启动应用程序后,我从 git 克隆了一个烧瓶应用程序

$蟒蛇开始.py

我收到以下错误

Start.py 有以下代码

并且在上面错误中提到的第 66 行的init .py 内部具有以下内容

这是应用程序结构

我的 api\app\helpers\module_import.py 有以下代码:

我的 api\app\api_1_0__init__.py 有以下代码:在第 78 行