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

Python中scripts目录导入冲突及无需绑定项目名解决方案问询

解决方案
  • 方案1:运行前调整sys.path优先级(最便捷,无额外配置)
    在ut01xxx.py的最开头(所有导入语句之前)加入如下代码:
import sys
from pathlib import Path

# 自动获取当前ut脚本所在的unittest目录的父目录(即项目根目录),插入到sys.path最靠前的位置,优先级高于site-packages
sys.path.insert(0, str(Path(__file__).parent.parent.resolve()))

后续导入语句保持from scripts.const import *即可,完全不依赖项目根目录的命名,也无需修改环境变量。

  • 方案2:用相对导入+模块式运行单测
    将ut01xxx.py中的导入语句改为相对导入:
from ..scripts.const import *

运行时不要直接执行脚本,切换到项目根目录的上级目录,以模块形式启动:
python -m unittest.ut01xxx
该方案也无需绑定项目根目录名称,适合批量执行单测的场景。

  • 方案3:可编辑安装项目包(适合长期开发)
    在项目根目录下新增pyproject.toml配置文件,内容如下:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "local-project"
version = "0.1.0"
packages = ["scripts"]

在项目根目录执行命令完成可编辑安装:
pip install -e .
安装完成后全局可直接导入scripts包,自动指向本地的项目scripts目录,不会匹配site-packages下的同名目录。仅在修改项目根目录路径后需要重新执行一次安装命令即可。

  • 方案4:调整运行时工作目录(零代码修改)
    运行单测时不要在unittest目录下执行,切换到项目根目录(即包含scripts、unittest文件夹的层级),执行命令:
    python unittest/ut01xxx.py
    此时Python会默认将当前工作目录加入sys.path最靠前的位置,优先匹配本地的scripts目录,原有导入语句无需任何修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:03