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 config
和 config.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.py
或 constants.py
文件并将 settings/constants 放在那里,并尽量避免在 __init__.py
中进行任何导入,除非它是要避免的标准库导入任何潜在的进口循环参考。
要记住的一件事是,无论何时导入该包中的任何模块,都会加载您放入 __init__.py
中的任何内容,因此您需要小心放在那里的内容并尽量保持简短。
我还在 pythonanywhere 上使用 Python 3.7 时收到了该错误消息。原来我已经上传了两次源模块,其中一次在我的用户文件夹中。模块只能放在项目文件夹中。
我在从 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 config
和 config.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.py
或 constants.py
文件并将 settings/constants 放在那里,并尽量避免在 __init__.py
中进行任何导入,除非它是要避免的标准库导入任何潜在的进口循环参考。
要记住的一件事是,无论何时导入该包中的任何模块,都会加载您放入 __init__.py
中的任何内容,因此您需要小心放在那里的内容并尽量保持简短。
我还在 pythonanywhere 上使用 Python 3.7 时收到了该错误消息。原来我已经上传了两次源模块,其中一次在我的用户文件夹中。模块只能放在项目文件夹中。