在Python中,当导入文件或模块时,. 和 .. 有特殊的含义,它们用于表示当前目录和上级目录(父目录)中的模块或包。
.(点):.代表当前目录。但是,在Python的导入语句中直接使用.来引用当前目录中的模块是不常见的,因为通常你会直接通过模块名来导入(假设模块在Python的搜索路径中,比如当前工作目录或PYTHONPATH环境变量指定的目录)。- 在某些情况下,
.可能用于表示相对导入中的当前包。但是,这种用法通常是在包内部进行子模块或子包的导入时看到的,并且要求你的脚本作为包的一部分来运行(即,脚本的父目录必须被视为一个Python包,通常包含一个__init__.py文件,尽管在Python 3.3+中,空的包可以不需要这个文件)。
..(双点):..代表上级目录(父目录)。在相对导入中,你可以使用..来引用上级目录中的模块或包。- 例如,如果你有一个包结构如下:
mypackage/ ├── __init__.py ├── submodule1/ │ ├── __init__.py │ └── file1.py └── submodule2/ ├── __init__.py └── file2.py
在file1.py中,如果你想导入file2.py中的某个函数或类,你可以使用相对导入:python复制代码
或者,如果你想导入from ..submodule2 import file2file2.py中定义的一个名为MyClass的类:python复制代码from ..submodule2.file2 import MyClass
重要注意事项:
- 相对导入(使用
.或..)依赖于文件的包结构,并且要求你的脚本以包的一部分来运行。如果你直接运行一个包含相对导入的脚本(比如通过python script.py),Python解释器可能会抛出ImportError或ModuleNotFoundError,因为它无法正确解析相对导入。 - 为了避免这些问题,你可以:
- 将你的脚本作为包的一部分来运行,比如通过
-m选项:python -m mypackage.submodule1.file1。 - 使用绝对导入,即使用完整的包名路径来导入模块或包。
- 在开发过程中,确保你的工作目录是包的根目录,或者将包的根目录添加到
PYTHONPATH环境变量中。
- 将你的脚本作为包的一部分来运行,比如通过
372

被折叠的 条评论
为什么被折叠?



