gpt4 book ai didi

python - 从不同文件夹导入 Python 模块

转载 作者:太空宇宙 更新时间:2023-11-04 05:29:57 24 4
gpt4 key购买 nike

我看到我要问的问题是一个非常微不足道的问题,已经被很多人问过并因此得到了回答。我已经查看了为该问题提供的解决方案,但我没有看到适用于我的情况的解决方案。

我有以下目录层次结构。

----a
-------__init__.py
--------------aa
------------------aa.py
------------------__init__.py
--------------bb
------------------bb.py
------------------__init__.py
-------a.py

我想做以下事情。

  1. 从文件a.py中导入bb.py和aa.py--通过在每个文件夹目录中使用__init__.py来完成
  2. 从 aa.py 导入 bb.py(不起作用)
  3. 从 aa.py 导入 a.py(不起作用)

通过查看许多解决方案,我将 __init__.py 文件放在每个文件夹目录中。

我用过:

import imp

foo = imp.load_source('module.name', 'path to the file')

这行得通,但由于必须对路径进行硬编码,所以我不确定这对我来说是否是一个可行的解决方案

目前我正在通过将路径添加到 sys 目录来进行导入。我想要一个更动态的解决方案。

我的项目的文件夹层次结构深入到 6-7 级子目录,我需要一个解决方案来从第 7 级导入第 1 级的模块。

如果有人能指出我遗漏了什么,我会很高兴。

最佳答案

您的应用程序的入口点是什么?例如,如果您从命令行启动 aa.py 文件,那您就不走运了。

“Guido 认为在包中运行脚本是一种反模式”(拒绝 PEP-3122 )

包的入口点应该在包的根目录中。在您的例子中,它是一个文件 a.py。从那里你像往常一样导入一些内部模块:

# contents of a.py
from aa import a

现在关于从你的包中导入。

假设在与aa.py 相同的目录中还有一个文件aa1.py。要从 aa.py 导入它,您可以使用相对导入功能

# contents of aa.py
from . import aa1

这里的.表示“在同一个目录”。

其他例子:

# contents of aa.py
from .. import a # here .. means "one level above"
from ..bb import bb # this will import your bb.py module

请注意,如果您直接从命令行运行 aa.py,那么所有导入都将失败!

更新:

上面示例中的

... 不是目录名称。这是表示“相同级别”、“高一级”等的 python 语法。如果您需要从高 3 级导入,您应该这样写:

from .... import my_module

关于python - 从不同文件夹导入 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37435162/

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