我正在制作一个侦听套接字的服务器。每当有新请求进入时,服务器就会产生一个新的handle_request实例。 handle_request.py 的每个实例都从request_handlers中导入相关的处理程序。
server.py
handle_request.py
request_handlers
|_handler_beta
|_handler_1
|_handler_2
虽然handlerX是一个模块,但request_handlers不是包。这些模块是自包含的,并在每个请求上重新加载。程序运行时可以添加,修改或删除模块。
问题:从任意目录导入模块的方法是什么?
做我的作业,我看到大多数问题涉及包,甚至一个标题为“ python:从文件夹导入模块”。因此我相信这个问题是截然不同的。该架构已经简化;是的,我正在考虑通过重新加载来修改文件。
答案 0 :(得分:2)
在目录中创建__init__.py
。这使它成为一个包。如果您正在扫描.py文件的目录,那么您可能希望跳过__init__.py
。
然后,您可以使用__import__('request_handlers.' + module, fromlist=[''])
导入它们(fromlist很重要,否则您将获得request_handlers
而不是相应的模块。
在没有__init__.py
的情况下执行此操作的一种方法是将request_handlers
目录放在sys.path
中,但这会使名称与其他模块发生冲突。另一种方式是使用execfile
。如果你愿意,你可以研究更多。我会这样做(之前已经完成了)package / __ import__方式。
答案 1 :(得分:0)
正如克里斯所说:在你的文件夹中添加__init__.py
。如果您事先不知道名称或者您不希望在代码中修改其名称,则可以使用__import__()
功能。