You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过pyproject.toml配置项目上游相对路径,统一解决多目录下的模块导入问题

如何通过pyproject.toml配置项目上游相对路径,统一解决多目录下的模块导入问题

我太懂你这种每次写脚本或Jupyter Notebook都要手动加sys.path的烦躁了——重复代码不仅麻烦,还容易因为路径写错出问题,团队协作时更是容易踩坑。其实咱们可以通过优化pyproject.toml配置,再配合本地可编辑安装的方式,彻底解决这个模块导入的痛点,再也不用写那些路径拼接的冗余代码了!

一、先确认你的pyproject.toml配置是否到位

你现有的配置已经有了核心部分,只需要确保这几行配置正确(如果没改的话,你的配置已经满足要求):

[tool.setuptools.packages.find]
where = ["src"]  # 指定从src目录查找包
include = ["sample_template*"]  # 匹配所有以sample_template开头的包

这部分配置告诉setuptools去哪里找你的项目包,确保src/sample_template能被识别为一个可导入的Python包。

二、执行本地可编辑安装(关键步骤)

因为你用的是uv作为包管理器,在项目根目录(也就是sample_project文件夹下)激活你的虚拟环境后,执行这条命令:

uv pip install -e .

这条命令的作用是把你的项目以“可编辑模式”安装到当前虚拟环境——简单说就是在虚拟环境里创建一个指向你项目src目录的“快捷方式”,这样Python会自动把src目录加入到sys.path中,不管你在项目的哪个子目录下运行代码,都能直接导入sample_template包。

三、验证效果,再也不用手动加路径了

完成安装后,不管是在scripts目录下的脚本,还是notebooks目录下的Notebook,都可以直接导入模块:

  • scripts/sample_script.py里直接写:
    from sample_template.sample_functions import 你的函数名
    
    完全不需要那些os.pathsys.path的代码了!
  • notebooks/sample_notebook.ipynb里同样直接导入:
    from sample_template import sample_functions
    
    不用再写sys.path.append('..')了!

四、额外注意事项

  • 确保激活虚拟环境:不管是运行脚本还是打开Jupyter Notebook,都要先激活项目的.venv虚拟环境,这样Python才会使用包含你可编辑安装包的环境。
  • Jupyter内核配置:如果用VS Code,记得把Notebook的内核切换到你的项目虚拟环境(.venv),这样Notebook才能识别到安装的包。
  • 包的结构规范:确保srcsrc/sample_template下都有__init__.py文件(哪怕是空文件),这样Python才会把它们识别为合法的包目录。

这样配置后,你整个项目的模块导入就统一了,再也不用在每个文件里重复写路径处理的代码,维护起来也轻松很多!

备注:内容来源于stack exchange,提问作者caeduft

火山引擎 最新活动