gpt4 book ai didi

Python 从更高级别的包中导入模块

转载 作者:太空狗 更新时间:2023-10-30 02:04:51 34 4
gpt4 key购买 nike

这是我的包层次结构

app  
|--__init__.py //Empty file
|--server.py
|--global_vars.py
|
|--handlers
|--__init__.py //Empty file
|
|--url1
| |--__init__.py //Empty file
| |--app1.py
| |--app2.py
|
|--url2
|--__init__.py //Empty file
|--app3.py

现在我想在 app1.py 中导入 global_vars.py。所以我给了 在 app1.py 中导入 app.global_vars.py

但是我得到以下错误:

    import app.global_vars
ImportError: No module named app.global_vars

我还应该提到我正在从 server.py 导入 app1.py。 server.py 是我实际运行的文件。当 server.py 导入 app1.py 时,app1.py 尝试导入 global_vars.py 并且出现上述错误

我在这里做错了什么?

最佳答案

如果您将 app/server.py 作为脚本运行,app 的父目录不会添加到 sys.path()app 目录本身被添加(不是作为包而是作为导入搜索路径)。

您有 4 个选项:

  1. server.py 移出 app 包(在它旁边)
  2. 在仅运行的 app 旁边添加一个新的脚本文件:

    from app import server
    server.main()
  3. 使用 -m switch option运行一个模块作为主入口点:

    python -m app.server
  4. server.py的父目录添加到sys.path:

    import os.path
    import sys

    parent = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.insert(0, parent)

    然而,最后一个选项可能会带来更多问题;现在 app 包和 app 包中包含的模块都在 sys.path 上。您可以同时导入 app.serverserver,Python 会将它们视为两个独立的模块,每个模块在 sys.modules 中都有自己的条目,具有全局变量的单独副本。

关于Python 从更高级别的包中导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16786485/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com