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

GitHub Action中Python自定义包导入失败问题求助

问题:Python模块导入在GitHub Action环境中失败(本地运行正常)

项目结构

code/
|-- __init__.py
|-- global_code/
|   |-- all_process.py
|-- africa/
|   |-- egypt/
|   |  |-- egypt_workflow.py

问题详情

在all_process.py中尝试用import code.africa.egypt.egypt_workflow as ew导入模块,本地运行无问题,但在GitHub Action的Ubuntu环境执行时,报错:

ModuleNotFoundError: No module named 'code.africa'; 'code' is not a package

已尝试但无效的方法

  • 添加相对路径到sys.path:
    import sys
    sys.path.append('.') # 也尝试过'..','./','../'
    
  • 通过os模块添加上级目录:
    import sys
    import os
    sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
    
  • 通过Path模块添加根路径:
    from pathlib import Path
    import sys
    path_root = Path(__file__).parents[2]
    sys.path.append(str(path_root))
    print(sys.path)
    
    该方法打印的sys.path包含/home/runner/work/***/***/code/global_code,但仍报错。
  • 尝试相对导入:
    import .code.africa.egypt.egypt_workflow as ew
    
    报错:ImportError: attempted relative import with no known parent package

目前仅以下方式可行,但需为每个国家单独配置,不够优雅:

sys.path.append('./code/africa/')
import egypt.egypt_workflow as ee
ee.main()
sys.path.append('./code/asian/')
import japan.japan_workflow as j
j.main()

GitHub Action配置参考

name: all_action
on:
  schedule:
    - cron: 0 22 * * *
  workflow_dispatch:
jobs:
  all_process: 
    runs-on: ubuntu-latest
    steps:
      - name: check code
        uses: actions/checkout@v3
      - name: set up Python 3.10
        uses: actions/setup-Python@v4
        with:
          python-version: 3.10
      - name: install requirements
        run: |
          pip install openpyxl
          pip install -r requirements.txt 
      - name: run code
        run: python ./code/global_code/all_process.py
      - name: commit and push
        run: |
          git config user.name "${GITHUB_ACTOR}"
          git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
          git add -A
          git commit -m "updated"
          git push

解决方案

方案1:调整GitHub Action的运行命令(推荐)

将Action中run code步骤的命令改为模块方式执行,而非直接运行脚本:

- name: run code
  run: python -m code.global_code.all_process

-m参数会让Python将项目根目录(code的父目录)加入模块搜索路径,自动识别code作为顶级包,此时无需修改sys.path,直接用import code.africa.egypt.egypt_workflow as ew即可正常导入。

方案2:正确添加项目根目录到sys.path

如果坚持直接运行脚本,需在all_process.py中添加项目根目录(而非global_code或code目录)到sys.path:

from pathlib import Path
import sys
# 获取项目根目录(即code目录的父目录)
project_root = Path(__file__).resolve().parents[1].parent
sys.path.append(str(project_root))

# 之后正常导入
import code.africa.egypt.egypt_workflow as ew

之前的错误是因为添加的是global_code目录,Python无法从该路径找到code包,必须添加code的父目录才能让Python识别code作为顶级包。

方案3:使用相对导入(需配合模块方式运行)

如果用方案1的python -m方式运行脚本,可使用相对导入简化代码:

from ...africa.egypt import egypt_workflow as ew

...表示从当前模块(global_code/all_process.py)往上跳两级:先到code目录,再到项目根目录,从而找到africa包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:25:26