在 Python 3.4 中导入文件

Importing files in Python 3.4

我在导入自己的 Python 文件时遇到问题。我的文件结构如下所示:

caboose2\
    __init__.py
    caboose.py
    bot\
        __init__.py
        settings.py
        config.ini

settings.py 文件中有一个方法 get_config() 使用 configparser 解析 config.ini 文件以收集存储在字典中的设置值.

caboose.py的内容很简单:

import bot
settings = bot.settings.get_config()

bot\__init__.py 包含:

import settings

settings.py只包含方法get_config()。该方法效果很好;它最初在 caboose.py 文件中,但为了干净起见,我想将它移动到它自己的文件中。

但是,当我 运行 caboose.py 文件时,我得到这个错误:

Traceback (most recent call last):
File "caboose.py", line 2, in <module>
  import bot
File "D:\Brogramming\python\caboose2\bot\__init__.py", line 1, in <module>
  import settings
ImportError: No module named 'settings'

我确定在 Python 中导入 modules/files 的一些基本部分我不理解,因此我决定寻求帮助。感谢您的宝贵时间和任何可能的答案!

您遇到此问题是因为当机器人的 __init__.py 为 运行 时,您的第一个项目 sys.path 仍保留在 caboose2\ 目录中。

__init__.py 用于模块的初始化逻辑,您不需要将 settings.py 导入到您的 __init__.py 文件中。

__init__.py 文件留空,然后在 caboose.py -

中执行以下操作
import bot.settings
settings = bot.settings.get_config()

如果您确实需要在 __init__.py 文件中导入 settings.py,请尝试 -

from bot import settings

已编辑 首先阅读这个 - https://docs.python.org/3/tutorial/modules.html#packages

The __init__.py files are required to make Python treat the directories as containing packages; this is done to prevent directories with a common name, such as string, from unintentionally hiding valid modules that occur later on the module search path. In the simplest case, __init__.py can just be an empty file, but it can also execute initialization code for the package or set the __all__ variable, described later.

有 2 个选项 -

或者使用模块导出

如果你想使用 __init__.py 然后这样做 -

  • 首先添加 __all__ 从包中导出方法 -

File: __init__.py:

from settings import get_config
__all__ = ['get_config']

File: caboose.py:

from bot import get_config
settings = get_config()

完全忽略 __init__.py 并删除其中的所有内容。然后 caboose.py 中的代码将自动运行。

File: caboose.py:

import bot.settings
settings = bot.settings.get_config()