代码之家  ›  专栏  ›  技术社区  ›  Dr Manhattan william_grisaitis

如何修复jenkins中的python模块导入错误

  •  1
  • Dr Manhattan william_grisaitis  · 技术社区  · 10 年前

    尽管根据这里关于堆栈溢出的问题设置了我的路径和python路径,但我在Jenkins中遇到了模块导入错误

    我试过这个

    Jenkins: putting my Python module on the PYTHONPATH

    Python module import failure in Jenkins

    这个命令在我的本地机器上运行,没有任何导入问题,但在Jenkins上失败

    命令

    #!/bin/bash
    
    export PYTHONPATH=$WORKSPACE:$PYTHONPATH
    export PATH=$WORKSPACE:$PATH
    export DJANGO_SETTINGS_MODULE=myapp.settings.test
    
    echo "Working directory: "
    pwd
    
    echo "path: "
    echo $PATH
    
    echo "Python path: "
    echo $PYTHONPATH
    
    
    /home/adminuser/.virtualenvs/myapp/bin/python myapp/manage.py jenkins --project-apps-tests  --enable-coverage --settings=myapp.settings.test
    

    生成错误

    Working directory: 
    /var/lib/jenkins/jobs/myapp_QA_TESTS/workspace
    path: 
    /var/lib/jenkins/jobs/myapp_QA_TESTS/workspace/myapp/apps/:/var/lib/jenkins/jobs/myapp_QA_TESTS/workspace:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
    Python path: 
    /var/lib/jenkins/jobs/myapp_QA_TESTS/workspace/myapp/apps/:/home/adminuser/.virtualenvs/myapp/bin:/var/lib/jenkins/jobs/myapp_QA_TESTS/workspace:
    
    -------- USING TEST SETTINGS ------
    
    Traceback (most recent call last):
     ......
        File "/var/lib/jenkins/jobs/myapp_QA_TESTS/workspace/myapp/apps/accounts/models.py", line 18, in <module>
            from apps.registration.tokens.token import GenerateToken
        ImportError: No module named registration.tokens.token
    

    我的文件结构

    myapp/
    ├── apps
    │   ├── __init__.py
    │   ├── accounts
    │   ├── registration
    ├── myapp
    │   ├── __init__.py
    │   ├── celery.py
    │   ├── settings
    │   ├── urls.py
    │   └── wsgi.py
    ├── manage.py
    

    查看模块目录

    myapp/apps/registration/tokens
    ├── __init__.py
    └── token.py
    
    myapp/apps/accounts/
    ├── __init__.py
    ├── models.py
    

    我甚至尝试将workspace目录和virtualenv路径附加到path和PYTHONPATH,我还将模块目录添加到了path与PYTHONPATH

    如何修复此导入错误,如有任何帮助,我们将不胜感激

    1 回复  |  直到 9 年前
        1
  •  1
  •   Dr Manhattan william_grisaitis    10 年前

    所以最后终于明白了

    您需要在测试期间创建虚拟环境,因此这是最后一个有效的命令

    #!/bin/bash
    
    
    export WORKSPACE=`pwd`
    
    # Create/Activate virtualenv
    virtualenv testenv -p /usr/bin/python3
    
    source testenv/bin/activate
    
    # Install requirements
    pip install -r requirements/test.txt 
    
    
    # Run them tests
    python myapp/manage.py jenkins --project-apps-tests  --enable-coverage --settings=myapp.settings.test
    

    希望这能帮助像我一样陷入困境的人