Python "ImportError: cannot import name" issue

Python "ImportError: cannot import name" issue

我在从 config/__init__.py 文件导入变量时遇到问题。

我的目录如下所示:

.
├── src
│   ├── config
│   │   ├── __init__.py
│   │   ├── base_config.py
│   │   ├── log_config.py
│   │   └── output_config.py
│   ├── script.py

__init__.py 我有 from config.output_config import output_data。该文件还包含一行 BUCKET = ...

在我的 output_config.py 文件中有 from config import BUCKET,它们在函数 output_data().

中使用

script.py 我有 import configconfig.output_data()

的电话

当我 运行 script.py 时,出现以下错误:

Traceback (most recent call last):
  File ".../src/config/output_config.py", line 15, in <module>
    from config import BUCKET
  File ".../src/config/__init__.py", line 7, in <module>
    from config.output_config import output_data
  File ".../src/config/output_config.py", line 15, in <module>
    from config import BUCKET
ImportError: cannot import name 'BUCKET'

看来我的问题可能污染了名称 space(..并进行循环引用..?),但我不确定如何解决该问题。据我了解,__init__.py 文件最适合用于导入其他配置文件,但我不确定如何将我的变量 BUCKET 放入我需要的 output_config.py 文件中。希望能帮助您解决问题并了解构建与导入相关的项目的最佳实践。谢谢!

我会说将该变量 BUCKET 放入不同的 python 文件或 settings.py,如果它是一个设置或常量,因为它会导致循环导入。

根据评论更新:

创建一个 settings.pyconstants.py 文件并将 settings/constants 放在那里,并尽量避免在 __init__.py 中进行任何导入,除非它是要避免的标准库导入任何潜在的进口循环参考。

要记住的一件事是,无论何时导入该包中的任何模块,都会加载您放入 __init__.py 中的任何内容,因此您需要小心放在那里的内容并尽量保持简短。

我还在 pythonanywhere 上使用 Python 3.7 时收到了该错误消息。原来我已经上传了两次源模块,其中一次在我的用户文件夹中。模块只能放在项目文件夹中。