问题标签 [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-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 以及如何修复此错误?
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.
python - 来自两个不同导入的 __class__ 相等性检查
我在我的 python 软件项目中有一个相当复杂的导入设置,我没有绕过使用 importlib 动态导入一些模块。因此,我遇到了我有两个相同类的对象的情况,但是由于它们是独立加载的,所以它们之间的相等性检查给了我False
.
它们对每个对象的字符串表示形式obj.__class__
看起来相同:
<class 'drivers.MongoDriver'>
vs <class 'drivers.MongoDriver'>
。__eq__
不过,对两个类、issubclass
、__eq__
ontype()
和isinstance
fail进行平等检查。
我可以想到一种通过比较仍然进行相等检查的hacky方法repr(obj.__class__)
,但这看起来并不那么好。另一种解决方案是“隐藏”指定某个唯一类 ID 的属性。
是否有另一种(更好的)方法如何在两个基本相同但已importlib
独立加载的类之间进行相等检查?
编辑:重要:我不是在寻找避免两次导入类的方法。我的项目的一些模块是有意动态重新导入的,以考虑运行时这些模块中的代码更改。然后这些模块再次导入其他模块,例如我想要进行相等性检查的驱动程序。尽管不必重新导入更改模块使用的那些不变模块会很好,但我知道每当我动态导入一个模块时,所有依赖项也会重新导入。(如果您有关于如何重新导入模块 A 的解决方案,该模块 A 本身具有(静态)导入 B,但不必将 B 与 A 一起重新导入,我会很高兴。但这不是我要问/寻找的直接内容为了。)
python-3.x - 从字符串导入lib.reload模块?
我想用来importlib
重新加载一个名称是动态生成的模块。
例子:
现在如何sys
使用变量重新加载模块want_reload
?我不能直接提供它,importlib.reload()
因为它说它需要一个模块,而不是 str。
如果提供无效字符串或未加载的模块会更好,例如"........"
,它会引发异常。
python - 从模块中导入特定类型的所有元素
我想在模块中导入仅属于特定类型的对象。
例如要导入的模块是:
现在我想A
从foo
(即a
)导入类型的元素。
显然,您可以导入所有foo
然后遍历它以检查类型。不过,我认为这并不理想。
也许有什么importlib
可以促进这一点?
编辑
(添加有关用例的更多信息。)
基本上,我正在尝试创建类似IPython 魔术的东西,并希望为自定义魔术创建一个工具。
用户将使用装饰器在文件中注册函数,该装饰器将返回特定类型的实例。
然后,用户将在实例化时传递模块的路径。
然后会发生这样的事情:
用户实际上不会调用GetsRegisteredKeys
. 他们只是通过其他地方的路径。
欢迎完全避免这种导入的替代设计。
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_two
run from child002.py
,但它不会重新加载calculation_two
by 调用child003.py
。
更具体地说,如果您master001.py
在手动输入任何内容之前运行并更改 的内容calculation_two
,那么当您被问到时
你输入N,当你被问到
你输入Y,你会看到child003.py
不反映新更新代码的返回值。
我阅读了如何卸载(重新加载)Python 模块?以及如何重新加载使用 `from module import *` 导入的 python 模块,它们非常有帮助,但我找不到解决这个特定问题的方法。
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 工作正常]
python - 如何动态导入具有超时的不安全 Python 模块?
我需要动态加载几个可能不安全的模块以进行测试。
关于安全性,我的脚本由低访问权限用户执行。
虽然,我仍然需要一种优雅地使导入过程超时的方法,因为我不能保证模块脚本会终止。例如,它可能包含调用input
或无限循环。
我目前正在使用Thread.join
a timeout
,但这并不能完全解决问题,因为脚本在后台仍然存在并且没有办法杀死线程。
如何导入模块,但None
如果脚本超时则返回?
python - 不使用 imp.load_source 从文件中获取 __version__ 值?
我之前已经完成了以下操作来获取版本字符串:
现在,什么时候imp
在 Python 3 中被弃用(我在 3.7.1 上),什么是一个很好的替代品load_source
,只需要 std 库?
这对我来说似乎有点令人费解,load_module
实际上已被弃用:
编辑#1:
这在导入任意 python 源文件中进行了讨论。(Python 3.3+)和出现的解决方案之一是:
python - Python 烧瓶应用程序在启动 ImportError 时抛出以下错误:不支持按文件名导入
在安装所有要求并通过以下方式启动应用程序后,我从 git 克隆了一个烧瓶应用程序
$蟒蛇开始.py
我收到以下错误
Start.py 有以下代码
并且在上面错误中提到的第 66 行的init .py 内部具有以下内容
这是应用程序结构
我的 api\app\helpers\module_import.py 有以下代码:
我的 api\app\api_1_0__init__.py 有以下代码:在第 78 行