Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.6运行时导入_Python_Python 3.x - Fatal编程技术网

Python 3.6运行时导入

Python 3.6运行时导入,python,python-3.x,Python,Python 3.x,我目前正在编写一个程序,其中Python文件被复制到带有主模块的docker容器中,然后应该在线程中执行 假设我有以下结构: . ├── app.py ├── rule1 | └── foo.py ├── rule2 | └── bar.py : : ... : └── ruleX └── foobar.py 其思想是,子目录中的每个.py实现一个接口,然后由main.py在自己的线程中调用。另一方面,main.py则与主机上运行的程序进行通信。 线程唯一需要做的就是创建

我目前正在编写一个程序,其中Python文件被复制到带有主模块的docker容器中,然后应该在线程中执行

假设我有以下结构:

.
├── app.py
├── rule1
|   └── foo.py
├── rule2
|   └── bar.py
:
:   ...
: 
└── ruleX
    └── foobar.py
其思想是,子目录中的每个
.py
实现一个接口,然后由
main.py
在自己的线程中调用。另一方面,
main.py
则与主机上运行的程序进行通信。 线程唯一需要做的就是创建加载类的实例并调用
.analyze()
-函数

我发现以下代码:

import importlib.util
spec=importlib.util.spec_from_file_位置(“module.name”、“/path/to/file.py”)
foo=importlib.util.module\u from\u spec(spec)
规范加载程序执行模块(foo)
foo.MyClass()

但在我的情况下,我不确定要为
module.name
输入什么。如何调用函数?

查找此信息的位置是。你在某个地方找到的代码基本上只是去掉了所有的解释和上下文

您还需要稍微了解一下Python模块和包是如何工作的,但除此之外,您在这里不了解的内容应该可以在同一文档章节中找到


但在我的情况下,我不确定要为
module.name
输入什么

module.name
只是模块的名称。这是将在回溯中显示的名称,它可能会影响其他调试和反射代码(例如,如果您在任何地方使用
inspect
),并且可能会影响模块内的相对导入。(我猜,除了调试输出,所有这些都不会影响您,在这种情况下,如果您弄错了,也没什么大不了的。)

无论如何,如果您不确定,并且希望看到一些示例,而不是深入阅读枯燥而混乱的文档,请打开交互式解释器并尝试以下操作:

import <whatever>
print(<whatever>.__name__, <whatever>.__file__)

最后一件事:您正在构建的是一个非常标准的插件系统,具有最简单的插件API(“必须公开一个不带参数的函数
analyze
)。您可能想四处寻找其他具有插件系统的应用程序,以阅读它们的代码以获取想法。(但请注意,它们中的许多都是向后兼容Python 2.7或3.3的,这意味着导入的实际步骤将非常不同,您不想使用它们使用的旧式代码。)

foo.analyze()