You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从项目根目录运行含lib相对导入的scripts子目录Python脚本?

解决Python脚本相对导入与运行上下文的问题

关于__init__.py修改工作目录的可行性

不行。__init__.py是Python包的初始化文件,只有当目录被当作模块导入时才会执行。而直接运行python scripts/xxx.py时,脚本是以主程序身份启动,不会触发scripts目录下__init__.py的执行。就算强行在某个__init__.py里改工作目录,也不符合Python模块规范,还可能引发其他路径问题,不建议这么做。

从根目录便捷运行脚本的方法

1. 使用python -m模块运行(推荐)

这是Python官方推荐的模块式运行方式,能自动把项目根目录加入模块搜索路径:

  • 先在scripts目录下创建一个空的__init__.py文件(让Python识别该目录为包);
  • 从项目根目录执行命令:python -m scripts.脚本名(注意不带.py后缀)。

比如scripts下有data_process.py,根目录执行:

python -m scripts.data_process

此时Python会将根目录加入sys.path,脚本里的from lib import...就能正常找到lib模块。

2. 设置PYTHONPATH环境变量

通过临时设置环境变量,让Python优先从项目根目录查找模块:

  • Linux/macOS终端(根目录下):
export PYTHONPATH=$(pwd) && python scripts/脚本名.py
  • Windows命令提示符(根目录下):
set PYTHONPATH=%cd% && python scripts\脚本名.py
  • Windows PowerShell(根目录下):
$env:PYTHONPATH = (Get-Location).Path; python scripts\脚本名.py

如果不想每次手动输入,可以把PYTHONPATH的设置加入shell配置文件(比如/.bashrc、/.zshrc),永久生效。

3. 根目录启动脚本封装

在项目根目录写一个统一的启动脚本(比如run.py),用来调用scripts里的脚本,示例:

import sys
from scripts import data_process

if __name__ == "__main__":
    # 假设data_process.py里有main函数作为执行入口
    data_process.main()

这种方式需要scripts里的脚本把执行逻辑放在if __name__ == "__main__":块或者封装成函数,避免导入时直接执行代码。之后只需在根目录运行python run.py即可。

内容的提问来源于stack exchange,提问作者Alex Poloz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:01:08