【问题标题】:Runtime import with with multiple subdirectories in python在 python 中使用多个子目录进行运行时导入
【发布时间】:2012-07-17 11:45:38
【问题描述】:

在 python 中执行此类导入的最佳方法是什么

要导入的文件位于位置 one/ne_one/one_two/"

文件名:两个.py

def foo():
    print "venkatttt!"

主文件: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()

这段代码的输出:

<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!

我正在寻找执行此导入的最佳方法

【问题讨论】:

  • import one.one_one.one_two.two 有什么问题?
  • @phihag 正在尝试执行运行时导入,因此无法使用 import one.one_one.one_two.two

标签: python import python-2.7 subdirectory


【解决方案1】:

从您的输出中,我可以看到您在每个子目录中已经有 __init__.py 文件,因此,您可以简单地 import 它们:

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

如果你想要每个模块的句柄,你可以单独导入它们:

$> 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

最后,您还可以在one/__init__.py 中定义__all__,并在执行import one 时自动进行此自动导入。

【讨论】:

  • 我不想加载所有类..我从数据库中获取类引用,然后我必须只加载那些类而不是全部。
  • 那你可以使用importlib.import_module:docs.python.org/dev/library/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2021-03-15
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多