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

Python子目录脚本导入父级模块方法(不使用sys.path,含site-packages实践验证)

解决方案

一、不使用sys.path的导入实现方式

首先你需要先将项目改造为标准的Python包结构,分别在my-project根目录、subfolder目录下新增空的__init__.py文件,该文件是Python识别目录为可导入包的核心标识。
之后有两种常用的可行方案:

  • 方案1:可编辑安装(推荐开发阶段使用)
    1. 在my-project根目录新建基础的包配置文件pyproject.toml,内容示例如下:
    [build-system]
    requires = ["setuptools>=61.0"]
    build-backend = "setuptools.build_meta"
    
    [project]
    name = "my_project"
    version = "0.1.0"
    
    1. 在my-project根目录打开终端,执行命令:pip install -e .
      该命令会将当前项目以可编辑模式关联到Python环境的依赖库中,你修改项目内的代码不需要重新安装即可生效。之后你在script.py中直接写import useful_functions或者from useful_functions import 对应函数即可正常导入。
  • 方案2:相对导入+模块式运行
    你可以在script.py中直接使用相对导入语法:from .. import useful_functions,但注意带相对导入的脚本不能直接用python script.py运行,你需要退到my-project的上级目录,执行命令:python -m my_project.subfolder.script即可正常运行。
    注:这里需要先把my-project目录名改为my_project,因为横杠不符合Python模块命名规范,无法被识别为合法的模块名。

二、直接放入Anaconda site-packages的方案是否符合最佳实践

该方案完全不符合Python开发的最佳实践,核心原因如下:

  • site-packages目录的设计用途是存放稳定的第三方依赖包,开发中的项目直接放入会导致本地开发代码和正式依赖混淆,极易出现版本冲突、修改不生效等难以排查的问题
  • 该操作无法适配多版本、多环境的开发需求,如果你有多个项目需要依赖不同版本的my-project代码,完全无法实现隔离
  • 项目迁移、部署时无法通过依赖清单自动拉取对应包,你需要手动梳理site-packages内的自定义内容,部署成本极高

另外你提到的import my-project.useful_functions写法本身就存在语法错误,Python会将横杠识别为减号,无法正常导入,需要先将目录名改为下划线格式的my_project才符合命名规范。

如果你需要实现全局导入的效果,直接使用前面提到的可编辑安装方案即可,既符合Python的包管理规范,又能满足开发阶段代码修改实时生效的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:27:03