☆ 问题描述
假设有如下目录结构
project/
│
├── utils.py
│
└── subfolder/
└── myfile.py
在这种情况下,utils.py 文件位于 subfolder 文件夹的外面。要从 myfile.py 中导入 utils.py 中的内容
★ 解决方案
要在一个Python文件中从位于该文件所在文件夹外的另一个文件导入函数或类,你需要确保两个文件都在Python的搜索路径中。假设你有如下的目录结构:
project/
│
├── utils.py
│
└── subfolder/
└── myfile.py
在这种情况下,utils.py
文件位于 subfolder
文件夹的外面。要从 myfile.py
中导入 utils.py
中的内容,你可以使用几种方法:
方法1: 修改系统路径
在 myfile.py
中,你可以添加代码来修改系统路径,这样 Python 就可以找到 utils.py
文件。示例如下:
import sys
sys.path.insert(0, '../')
from utils import *
这里 sys.path.insert(0, '../')
将 utils.py
文件所在的上级目录添加到 Python 搜索路径的开始处,确保 Python 可以找到并导入 utils.py
。
方法2: 使用相对导入
如果你的项目结构适合使用包的结构(即目录中有 __init__.py
文件),你可以使用相对导入。首先,确保每个需要作为包处理的目录中都有一个空的 __init__.py
文件:
project/
│
├── utils.py
│
└── subfolder/
├── __init__.py
└── myfile.py
然后,在 myfile.py
中使用相对导入:
from ..utils import *
注意,使用相对导入时,你的脚本必须作为包的一部分运行,不能直接作为主脚本运行,否则会出错。
即,你需要这样的方式执行代码:
python -m myproject.submodule1.myscript
方法3: 使用环境变量
你可以设置 PYTHONPATH
环境变量,使其包括 utils.py
所在的目录。这样,当你运行 Python 时,它会自动将该目录添加到搜索路径中。
在 Unix-like 系统中,你可以在终端中这样设置:
export PYTHONPATH="/path/to/project:$PYTHONPATH"
在 Windows 系统中,你可以在命令提示符中这样设置:
set PYTHONPATH=C:\path\to\project;%PYTHONPATH%
这样设置之后,你可以在 myfile.py
中正常导入:
from utils import *
选择最适合你项目结构和需求的方法来导入模块。如果你正在开发一个较大的项目,考虑使用环境变量或确保你的项目可以作为包运行,这通常更为稳定和灵活。