首页 > 解决方案 > 未找到 Jenkins ImportError 模块

问题描述

我有这样的文件结构:

Main/
|----unit_tests
|    |---test_main.py
|    |---__init__.py
|--main.py
|--__init__.py
|--requirements.txt

test_main.py:

import unittest.mock
from main import MainFunction
from nose.tools import assert_is_not_none, assert_is_none, assert_equal

class TestMainLogic(unittest.case):
~~~ code here ~~~~

在 Pycharm 的 test_main.py 中运行我的单元测试时,一切都很好。但是,当我尝试在 Jenkins 设置中运行它时,我得到:

+ python3 unit_tests/test_main.py
Traceback (most recent call last):
  File "unit_tests/test_main.py", line 4, in <module>
    from main import MainFunction
ModuleNotFoundError: No module named 'main'

这是我的詹金斯文件:

pipeline 
{
    environment 
    {
        PATH = "/home/jenkins/.local/bin:$PATH"
    }
    stages 
    {
        stage('build') 
        {
            steps
            {
                sh 'python3 --version'
                sh 'wget https://bootstrap.pypa.io/get-pip.py'
                sh 'python3 get-pip.py'  
                sh 'pip3 install -r requirements.txt'
                echo 'build phase has finished'
            }
        }
        stage('Lint')
        {
            steps
            {
                sh 'pylint unit_tests/test_main.py'
            }
        }
        stage('test')
        {
            steps
            {
                sh 'python3 unit_tests/test_main.py'
            }
            post
            {
                always
                {
                    cleanWs()
                }
            }
        }
    }
}

我已经关注了几个帖子,但我没有得到有效的答案。我试过:Jenkins 中的 Python 模块导入失败及其链接的答案。我无权通过 ssh 访问 Jenkins 服务器并找到路径,因此我需要一种在执行时设置它的方法。

标签: python-3.xjenkinsjenkins-pipeline

解决方案


您需要在test_main.py文件中使用绝对导入而不是相对导入。

test_main.py

代替:

from main import MainFunction
# SOME CODE

和:

from Main.main import MainFunction
# SOME CODE

推荐阅读