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

如何在子模块中正确导入父模块,同时支持独立运行与main.py调用

Python 跨模块导入问题解决方案

项目文件结构

src
├── API
│   ├── API.py
│   └── __init__.py
├── DataBase
│   ├── CreateDB.py
│   ├── DB.py
│   ├── SpacyTags.py
│   └── __init__.py
├── ML
│   ├── FeaturePipe.py
│   ├── Labeler.py
│   ├── Predictor.py
│   ├── Transformer.py
│   ├── ModelCreator.py
│   ├── ModelOptimizer.py
│   └── __init__.py
├── News
│   ├── CNBCSpider.py
│   ├── CNBC_parse_article.py
│   ├── HistNewsAPI.py
│   ├── NewsListener.py
│   ├── __init__.py
│   └── new_article_funcs.py
├── Stock
│   ├── HistStockAPI.py
│   ├── ISIN.py
│   ├── PortfolioListener.py
│   ├── UpdateEntries.py
│   └── __init__.py
├── Testing
│   └── ArticleFeatureTesting.ipynb
├── Exceptions.py
├── __init__.py
├── config.py
└── main.py

问题背景

此前在PyCharm中开发时,使用绝对导入(如from src.ML.Labeler import Labeler)可正常运行;迁移到树莓派后,在src/DataBase/DB.py中导入src/config.py时遇到问题:

  • 尝试相对导入时触发错误:ImportError: attempted relative import beyond top-level package
  • 希望同时支持运行依赖多模块的main.py,以及单独运行子模块测试,且不想在每个文件中添加sys.path.append()代码。

解决方案

方案1:正确使用相对导入 + 模块方式运行子模块

  1. 修改子模块导入语句:在DB.py中使用相对导入引用上层目录的config.py:
    # src/DataBase/DB.py
    from ..config import 你的配置变量名  # 替换为实际需要导入的内容
    
  2. 运行方式调整:
    • 运行main.py:直接执行python src/main.py(或进入src目录后执行python main.py)
    • 单独运行子模块:使用Python的模块运行方式,避免直接执行文件:
      python -m src.DataBase.DB
      
    这种方式会让Python将src识别为顶层包,相对导入即可正常工作。

方案2:设置PYTHONPATH环境变量

  1. 临时生效:在树莓派的终端中,将项目根目录(即包含src文件夹的目录)添加到PYTHONPATH:
    export PYTHONPATH="/path/to/你的项目根目录:$PYTHONPATH"
    
  2. 永久生效:将上述命令添加到~/.bashrc或~/.profile文件中,重启终端后自动生效。
  3. 导入方式保持不变:所有模块仍可使用PyCharm中的绝对导入语法(如from src.config import ...),无需修改代码,同时支持直接运行子模块或main.py。

方案3:可编辑安装项目(推荐)

  1. 创建配置文件:在项目根目录下创建setup.py,内容如下:
    from setuptools import setup, find_packages
    
    setup(
        name="你的项目名称",
        version="0.1",
        packages=find_packages(where="src"),
        package_dir={"": "src"},
    )
    
  2. 执行可编辑安装:
    pip install -e .
    
  3. 效果:项目会被Python识别为全局可导入的包,无论在哪个目录运行,都能使用绝对导入或相对导入,完全匹配PyCharm的开发环境,同时支持任意方式运行main.py或子模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:50:45