【发布时间】:2017-02-05 16:45:14
【问题描述】:
我有一个这样的文件树:
Root Folder
├───Modules
│ └───RPi
│ ├──__init__.py
│ └──RPi.py
└─program.py
RPi.py
def foo():
print("bar")
__init__.py
import RPi
program.py
mod1 = __import__("Modules.RPi.RPi")
mod1.foo()
当mod1.foo() 被调用时,我得到AttributeError: 'module' object has no attribute 'foo'
我使用 __import__ 而不是 import 语句的原因是因为“模块”子目录和名称仅在运行时才知道。
考虑到这一点,我如何在program.py 中导入RPi.py,以便可以从program.py 访问它的顶级(全局)函数和变量 (mod1.foo()上面的例子)?
【问题讨论】:
-
1.导入时不要包含
.py; 2.RPi模块没有有一个foo属性,你需要from RPi import foo。 -
@jonrsharpe 1. 只是一个错字。我会编辑它。 2. 这样做的问题是模块名称在运行前是未知的。如果我使用 from X import Y 则无法设置动态模块名称,因此我尝试做的整个事情都会崩溃。
-
不,我的意思是你需要
RPi/__init__.py。您应该使用静态导入来实现此功能,以便在 尝试使其动态化之前知道模块级别可用的名称。 -
易于调试:
print(dir(mod1)) -
我尝试将“from RPi import *”添加到 init py 文件中,但我仍然遇到同样的错误。
标签: python python-import python-module