在 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()
我在导入自己的 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()