简体   繁体   English

在python中具有多个子目录的运行时导入

[英]Runtime import with with multiple subdirectories in python

what is the best way to perform this type of import in python 在python中执行这种类型的导入的最佳方法是什么

file to be imported which is available in location one/ne_one/one_two/" 要导入的文件,该文件位于位置one / ne_one / one_two /“

fielname : two.py 文件名:two.py

def foo():
    print "venkatttt!"

main file : main.py 主文件:main.py

s = __import__("one.one_one.one_two.two", fromlist=[])
function_class =  getattr(s,"one_one")
function_class1 =  getattr(function_class,"one_two")
function_class2 =  getattr(function_class1,"two")
print s
print function_class
print function_class1
print function_class2
function_class2.foo()

output of this code: 此代码的输出:

<module 'one' from '/opt/auto/src/ex/one/__init__.pyc'>
<module 'one.one_one' from '/opt/auto/src/ex/one/one_one/__init__.pyc'>
<module 'one.one_one.one_two' from '/opt/auto/src/ex/one/one_one/one_two/__init__.pyc'>
<module 'one.one_one.one_two.two' from '/opt/auto/src/ex/one/one_one/one_two/two.py'>
venkatttt!

i am looking out for the best way to perform this import 我正在寻找执行此导入的最佳方法

From your output, I can see you already have __init__.py files in each subdirectory, therefore, you can simply import them: 从输出中,我可以看到每个子目录中已经有__init__.py文件,因此,您可以简单地import它们:

$> from one.one_one.one_two.two import foo
$> foo()

If you want a handle for each module, you can import them separately: 如果需要每个模块的句柄,则可以分别导入它们:

$> import one.one_one as function_class
$> import one.one_one.one_two as function_class1
$> import one.one_one.one_two.two as function_class2

Finally, you can also define __all__ in one/__init__.py and let this auto-imports happen automatically when import one is executed. 最后,您还可以在one/__init__.py定义__all__ ,并在执行import one时自动执行此自动import one

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM