如何在运行子文件夹Python脚本时将项目根目录加入PYTHONPATH
解决方法
针对你的场景,有几种标准且便捷的方式可以实现将folder_1加入PYTHONPATH,无需手动全局配置:
方法1:使用Python的-m模块运行方式
这是最推荐的标准做法,适合开发阶段快速解决:
- 给
folder_1、folder_2、folder_3都添加空的__init__.py文件,把它们变成Python可识别的包结构:
- folder_1 - __init__.py - folder_2 - __init__.py - file1.py - file2.py - folder_3 - __init__.py - file3.py
- 切换到
folder_1的上级目录(也就是包含folder_1的那个目录),执行以下命令运行脚本:
python -m folder_1.folder_2.file1
这种方式会自动将当前目录(folder_1的上级目录)加入PYTHONPATH,file1.py里就能用绝对导入:
# file1.py中导入file3的函数 from folder_1.folder_3.file3 import 你的函数名
方法2:在file1.py中动态添加路径
如果不想改运行目录或加__init__.py,可以在file1.py最开头加一段代码,动态把folder_1的路径加入PYTHONPATH:
import os import sys # 获取file1.py所在目录的上级目录(即folder_1的路径) folder_1_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if folder_1_path not in sys.path: sys.path.append(folder_1_path) # 现在可以导入file3中的函数 from folder_3.file3 import 你的函数名
这种方式不用改项目结构或运行命令,适合临时场景,但如果项目目录结构变动,这段代码可能需要调整。
方法3:将项目变为可安装包(适合长期维护的项目)
如果你的项目需要长期开发,推荐用这种方式:
- 在
folder_1的上级目录创建pyproject.toml文件,内容示例:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "你的项目名" version = "0.1.0" packages = ["folder_1"]
- 切换到
folder_1的上级目录,执行以下命令以可编辑模式安装项目:
pip install -e .
安装后,无论在哪个目录运行脚本,都能直接用绝对导入from folder_1.folder_3.file3 import ...,Python会自动识别包路径。
内容的提问来源于stack exchange,提问作者zjffdu
相关产品推荐
相关产品推荐

