问题标签 [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 ImportLib'没有命名模块'
我正在尝试将变量用作从 Python 中导入的模块。
使用 ImportLib 我已经成功地找到了测试...
...通过打印 select_module 我可以看到它成功地找到了脚本:
但是,当我尝试在代码中使用此变量从中导入模块时:
程序退出并出现以下错误:
我试图将一个init .py 文件添加到脚本所在的主目录和 /test 目录,但无济于事。我确定这只是我想念的愚蠢的小东西-有人知道吗?
python - Python importlib import_module 模块的相对导入
根据这个答案,您可以像importlib
这样import_module
使用相对导入:
为什么相对导入对 sklearn.feature_extraction.text 不起作用?
我验证这text
是一个模块:
退货
编辑
“不起作用”是指它不导入模块。
我正在使用 Python 3.4
绝对方式有效:
相对方式不会:
python - 无法使用 importlib.import_module 导入模块
我想用来importlib.import_module
动态导入模块。我的代码是这样的:
我可以在 Python 控制台中成功地做到这一点。但是如果我在文件中运行这些代码C:\Users\Administrator\Desktop>python test.py
,它就不能工作:
但是如果我将 db.py 文件复制到与脚本文件相同的目录中,它就可以工作。我不知道为什么。
python - 使用“当前目录”导入导入模块
我有以下代码来动态加载模块:
它工作得非常好,除了它试图在同一个文件夹中导入脚本(而不是同名包的一部分)的情况。例如,脚本a.py
正在做import b
. 它会导致错误ImportError: No module named 'b'
(这在 Python 3 中很常见)。
但我真的很想找到解决这个问题的方法吗?这将通过预先解决:
编写“a”脚本。
虽然我希望它可以通过以下方式解决:
哦,是的,理由是我还想支持导入不是正确的包/模块的模块,而只是一些可以在解释器中工作的脚本。
可重现的代码:
~/example/a.py
~/example/b.py
~/somewhere_else/main.py(与 a/b 不同)
然后在命令行上运行:
这导致ImportError: No module named 'b'
下面的代码解决了这个问题,但当然我们不能sys.path
在所有脚本中手动放置东西。
~/example/a.py (2)
我真的希望其他人可能有一个我还没有想到的解决方案。
附录
python - importlib 找不到模块
猫测试.py
ls项目/
蟒蛇测试.py
列出导入的模块 (sys.modules) 不显示任何模块项目。
我可以使用 python shell导入bar 。
有任何想法吗?
python - 在 Celery 任务中动态导入模块
是否可以在 Celery 任务中动态导入模块?
例如,我的hello.py
工作目录中有一个名为的模块:
我可以使用以下方法动态导入它importlib
:
我想从 Celery 任务中执行与上述相同的操作:
任务运行时出现以下错误:
请注意print(os.listdir())
(上面调试输出中的第 6 行)的输出,我们肯定在正确的目录中并且hello.py
就在那里。
是否可以从 Celery 任务中动态导入模块?
python - 使用 importlib.util 检查库时出错
我正在尝试使用 importlib 库来验证在 Python 3.5.2 中执行脚本的计算机上是否安装了 nmap 库
我正在尝试使用importlib.util.find_spec("nmap")
但收到以下错误。
有人可以告诉我哪里出错了吗?
编辑
我能够使用以下代码使该功能正常工作。
python - 强制从源中卸载/解构动态导入的文件
一直是SO的长期浏览器,终于问了我自己的问题!
所以,我正在编写一个自动化脚本/模块,它递归地在目录中查找具有特定名称的 python 模块。如果我找到一个具有该名称的模块,我会动态加载它,从中提取我需要的内容,然后卸载它。我注意到虽然简单地删除模块并不会删除对该模块的所有引用,但在某个地方还有另一个挥之不去的地方,我不知道它在哪里。我尝试查看源代码,但无法很好地理解它。这是我所看到的示例,大大简化了:
我正在使用 Python 3.5.2(Anaconda v4.2.0)。我正在使用 importlib,这就是我想要坚持的。我也希望能够使用 vanilla python-3 来做到这一点。
我从这里的 python 文档中获得了源代码的导入(是的,我知道这是 Python 3.6 文档)。
我的主要司机...
我的示例模块...
输出:
我期待看到“SO LONG A!” 在“THE END”之前打印。那么,对我的模块的其他隐藏引用在哪里?我知道我的 del 是无偿的,因为我将它包装在一个函数中。我只是希望删除和范围明确。如何让 a.py 完全卸载?我计划动态加载大量像 a.py 这样的模块,并且我不想再坚持使用它们了。有什么我想念的吗?
python - importlib 可以从任何目录(非包)导入模块吗?
我正在尝试使用importlib
.
例如,给定一个文件“a/b/some_file.py”,并且__init__.py
这些目录中也没有文件(我也不能添加它们),导入它的最佳方法是什么?
我尝试的似乎不正确:(从“a”'a 父目录午餐提示并将其添加到路径后)
我也尝试了相对导入,但结果是一样的。
unit-testing - 测试不同的调用模式
我想测试cookiecutter生成的项目在多种调用模式下的行为。
鉴于以下生成的项目
内容__init__.py
:
内容__main__.py
:
(我已经阅读过关于 的问题__main__.__spec__
,这不是这个问题的内容。事实上,我想试驾-TDD-我的这些问题的解决方法)
现在我编写测试,其中生成的项目结构和位置是已知的(例如,可通过 pytest 固定装置获得)
sys.argv
奖励:为?注入值