【问题标题】:Trouble with minimal example Python Module Imports最小示例 Python 模块导入的问题
【发布时间】:2023-03-09 14:05:01
【问题描述】:

我制作了一个最小的示例项目来尝试解决我的模块导入问题。结构如下:

MyProject/
├── main.py
└── utils/
    ├── __init__.py
    ├── foo.py
    └── bar.py

ma​​in.py 仅包含此代码:from utils import foo

__init__.py 不包含任何代码

foo.py 仅包含此代码:from bar import Bar

bar.py 仅包含此代码:class Bar: pass

如果我运行python utils/bar.py,它将毫无例外地运行。

同样,如果我运行python utils/foo.py,它会毫无例外地运行。

但是,如果我运行python main.py,则会导致以下异常:ModuleNotFoundError: No module named 'bar'

有没有办法解决这个问题?或者它甚至是一个问题,也许我正在做一些我不应该做的事情?

【问题讨论】:

  • from .bar import Bar ?
  • 这修复了运行 main.py 的能力,但是如果我尝试运行 foo.py,我会收到一个新错误:“ImportError:尝试使用没有已知父包的相对导入”
  • ``` try: from .bar import Bar except ImportError: # python3 from bar import Bar except ValueError: # python2 from bar import Bar ```
  • 成功了!谢谢!不过很有趣……这是这类事情的标准做法吗?
  • 调用“子包”和“主包”也不是真正的标准做法。除了通过调整 main.py 中的 python 模块搜索路径之外,可能还有其他更简洁的方法可以避免这些,例如:stackoverflow.com/questions/16981921/…

标签: python import module package


【解决方案1】:

如果您想将其用作独立调用 (python utils/foo.py) 和来自主调用 (python main.py),您可以同时使用两个导入:

try:
    from .bar import Bar
except ImportError: # for python3
    from bar import Bar
except ValueError: # for python2
    from bar import Bar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多