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

修复src结构Python包导入路径:兼容外部入口与依赖分发

解决方案

核心思路

要同时满足「内部模块无src前缀导入(支持仓库发布)」和「入口文件在src外可正常运行」,关键是让Python能识别src下的potato、datastuff等作为顶级模块,同时保持现有项目结构不变。


步骤1:统一内部模块的导入语句

将所有src内部模块(包括potato、datastuff、utils下的代码)中的导入语句里的src.前缀全部移除:

  • 原语句:from src.potato.some_module import some_class → 修改为:from potato.some_module import some_class
  • 原语句:from src.datastuff.xxx import func → 修改为:from datastuff.xxx import func

这一步是为了让发布到CA仓库的potato和datastuff包,在被其他项目依赖时,内部导入能正常找到依赖的模块(因为此时它们是顶级包,不存在src层级)。


步骤2:解决入口文件的模块查找问题

选择以下任意一种最小改动的方法:

方法A:修改入口文件添加路径(代码层面解决)

在每个入口文件(entrypoint1.py、entrypoint2.py)的最顶部添加以下代码,将项目根目录加入Python的模块搜索路径:

import sys
from pathlib import Path

# 将项目根目录(入口文件所在目录)添加到sys.path
sys.path.append(str(Path(__file__).parent))

之后直接运行入口文件即可:python entrypoint1.py

方法B:设置环境变量(无代码改动)

运行入口文件前,先设置PYTHONPATH环境变量指向项目根目录:

  • Linux/macOS:
    export PYTHONPATH=/path/to/你的项目根目录
    python entrypoint1.py
    
  • Windows(CMD):
    set PYTHONPATH=C:\path\to\你的项目根目录
    python entrypoint1.py
    
  • Windows(PowerShell):
    $env:PYTHONPATH = "C:\path\to\你的项目根目录"
    python entrypoint1.py
    

如果需要长期生效,可以把PYTHONPATH的配置加入shell的初始化文件(比如~/.bashrc、~/.zshrc)。


可选优化(更规范的开发/发布流程)

如果团队愿意做一点额外配置,可以在项目根目录添加pyproject.toml文件,将代码声明为可安装的包,这样导入逻辑会更稳定:

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "your-project-name"
version = "0.1.0"
packages = ["potato", "datastuff", "utils"]
package_dir = {"": "src"}

然后在项目根目录运行:

pip install -e .

这会以「可编辑模式」安装你的包,之后无论是运行入口文件还是内部模块调试,都不需要手动修改sys.path或PYTHONPATH,发布到CA仓库也更符合标准流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:10:11