【问题标题】:Trying to run python code on jenkins in ubuntu尝试在 ubuntu 的 jenkins 上运行 python 代码
【发布时间】:2020-03-03 08:00:41
【问题描述】:

全部。

我最近开始使用 Jenkins,试图用 Jenkins 管道替换 cronjob。我真的有点编程术语的知识。我从有关 stackoverflow 的问题中学到了什么。所以,如果你们需要更多信息,如果您使用简单的英语,我将不胜感激。

所以,我安装了最新版本的 Jenkins 和建议的插件以及所有我认为对 python 运行有用的插件。

之后,我搜索了stackoverflow和其他网站来完成这项工作,但我能做的就是

#!/usr/bin/env python

from __future__ import print_function

print('Hello World')

它成功了。

目前,Jenkins 在 Ubuntu 16.04 上运行,我使用的是 anaconda3 的 python (~/anaconda3/bin/python)。

当我尝试运行更复杂的 python 代码(我的意思是导入 pandas)时,它给了我导入错误。

到目前为止我尝试过的是

  1. 执行 python 脚本构建:导入 pandas - 导入错误
  2. 执行 shell 构建:import pandas(将导入 pandas 添加到上述代码中)
  3. python builder build: import pandas - 无效的解释器错误
  4. 管道作业:sh python /path_to_python_file/*.py - 导入错误

所有错误。由于“hello world”有效,我相信使用 anaconda3 的 python 不是问题。另外,它导入了 print_function 就好了,所以我想知道我应该从这里做什么。更改工作区设置?工作目录设置?代码更改?

谢谢。

【问题讨论】:

    标签: python pandas jenkins anaconda


    【解决方案1】:

    既然 'hello world' 有效,我相信使用 anaconda3 的 python 不是问题。

    你的假设是错误的。

    有多种方法可以解决这个问题,但它们都归结为使用正确的 python 解释器和已安装的 pandas。通常在 ubuntu 中你至少会有两个解释器。一个用于 python 2,一个用于 python 3,您将通过调用 python pth/to/myScript.pypython3 pth/to/myScript.py 在 shell 中使用它们。 pythonpython3 在这种情况下只是一种 标签,它们使用环境变量 PATH 指向正确的可执行文件。

    通过安装 anaconda3,您将添加一个带有 pandas 的解释器和许多其他预安装的软件包。如果你想使用它,你需要以某种方式告诉你的 shell 或 Jenkins。如果import pandas 给您一个错误,那么您可能正在使用不同的解释器或不同的python 环境(但这超出了这里的范围)。

    回到你的脚本

    this 堆栈溢出答案之后,您会看到#!/usr/bin/env python 所做的所有事情都是为了确保您在Ubuntu 的环境路径上使用了第一个python 解释器。几乎可以肯定,这不是您使用 anaconda3 安装的那个。很可能它将是与 ubuntu 一起分发的默认 python 2。如果您想确定哪个解释器正在运行您的脚本,而不是在里面输入“Hello World”:

    #!/usr/bin/env python
    
    import sys
    
    print(sys.executable) # this line will give you the exact path to the interpreter
    print(sys.version)    # this one will give you the version
    

    好的,那该怎么办?

    好吧,使用正确的解释器运行您的脚本。从您的文件中删除#!/usr/bin/env python,如果您有管道,请添加:

    sh "/home/yourname/anaconda3/bin/python /path_to_python_file/myFile.py"
    

    它很可能会解决问题。它也非常灵活,如果你想在不同的机器上使用这个 python 文件,你不会在里面硬编码你的用户名。

    【讨论】:

    • 谢谢!!它真的帮助了我!只是为了澄清以供将来参考,如果要在 shell 中执行代码,请删除 sh.如果要在管道中执行代码,则 sh 之后的所有内容都应在 ''(quotation) 中。
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2014-06-06
    • 2014-02-02
    • 2011-04-24
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多