【问题标题】:How to properly import from a parent folder?如何从父文件夹正确导入?
【发布时间】: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


【解决方案1】:

我找到了解决办法。

我必须改变

import RPi

from RPi import *

init.py 文件中

mod1.foo()

getattr(mod1, foo)()

在程序.py中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2018-12-24
    相关资源
    最近更新 更多