【问题标题】:Jenkins: putting my Python module on the PYTHONPATHJenkins:将我的 Python 模块放在 PYTHONPATH
【发布时间】:2012-10-11 08:10:34
【问题描述】:

我正在使用 Jenkins 测试我开发的 Python 模块 nodepy。但是,我收到如下错误:

File "/var/lib/jenkins/jobs/NodePy/workspace/convergence.py", line 6, in workspace.convergence
Failed example:
    from nodepy import rk, convergence, ivp
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.7/doctest.py", line 1289, in __run
        compileflags, 1) in test.globs
      File "<doctest workspace.convergence[0]>", line 1, in <module>
        from nodepy import rk, convergence, ivp
    ImportError: No module named nodepy

如何在 Jenkins 中设置 PYTHONPATH(以便我的模块可导入)?

我什至不确定应该添加哪个目录。看来 Jenkins 把东西放在了 jenkins/jobs/nodepy/workspace/ 中,所以该目录甚至没有正确的名称供 python 查找。

编辑:

python 模块 nodepy 是一个 git 存储库,我已将我的 jenkins 作业配置为观看和签出。

【问题讨论】:

    标签: python jenkins environment-variables


    【解决方案1】:

    在python3安装过程中,请确保安装适用于所有用户

    自定义安装 -> 下一步 -> 为所有用户安装

    【讨论】:

      【解决方案2】:
      • 将其添加到您的参数化作业参数列表中(并填写或提供默认值)
      • 或者如果您对 jenkins 有管理员访问权限,您可以将其添加到那里的系统变量中(转到 Manage Jenkins,然后转到 System Configuration
      • 或在您的脚本中使用sys.path.append

      例如

      import sys
      import os
      # jenkins exposes the workspace directory through env.
      sys.path.append(os.environ['WORKSPACE'])
      import nodepy
      

      或者,在您的 jenkins 构建配置中,配置构建步骤(如果它是一个 shell 脚本):

      export PYTHONPATH=$WORKSPACE:$PYTHONPATH
      

      包问题

      /var/lib/jenkins/jobs/NodePy/workspace/convergence.py
      

      这是个问题,因为没有nodepy 目录。所以即使你放置了正确的系统路径,你的包结构也不会是正确的。你可以做的是改变你的工作空间的样子,从:

      /var/lib/jenkins/jobs/NodePy/workspace/convergence.py
      /var/lib/jenkins/jobs/NodePy/workspace/ivp.py
      /var/lib/jenkins/jobs/NodePy/workspace/rk.py
      

      /var/lib/jenkins/jobs/NodePy/workspace/nodepy/__init__.py
      /var/lib/jenkins/jobs/NodePy/workspace/nodepy/convergence.py
      /var/lib/jenkins/jobs/NodePy/workspace/nodepy/ivp.py
      /var/lib/jenkins/jobs/NodePy/workspace/nodepy/rk.py
      

      编辑:在正确的子目录中提取文件

      你的工作空间将是

      /var/lib/jenkins/jobs/NodePy/workspace/
      

      您不需要更改工作区目录,它由您的工作名称 (NodePy) 和您的 jenkins 配置键入,您只需要创建 nodepy 目录工作区,并将您的文件放在那里。您可以change your jenkins job configuration 并让它在正确的子目录中签出git repo nodepy,或者您可以自己移动文件:

      mkdir .nodepy
      # .nodepy is hidden, * doesn't capture hidden files.
      mv * .nodepy
      mv .nodepy nodepy
      

      【讨论】:

      • 由于是通过jenkinks SCM插件获取nodepy包文件,而不是手动获取,所以需要设置正确的选项。我看到你找到了那个选项。
      • 这里我正在查看一个 3 年前的答案,因为我在 Google 上找不到其他任何内容,所以我想评论一下 sys.path.append(os.environ['WORKSPACE'] + /path/to/file) 是有效的答案。 export pythonpath 在本地工作,但在 Jenkins 对我没有任何帮助。如果有人有更新的解决方案,请赐教
      • 对于 jenkins 管理员,将内容添加到我的系统变量中
      • 谢谢您,您的解决方案今天对我很有帮助!最初我的目录中没有“init.py”,因为我使用的是 Python 3.7。一旦我按照您的建议将其添加回来。 Jenkins 能够找到该模块。
      【解决方案3】:

      事实证明,我需要做的就是遵循this question 的答案,以便让 Jenkins 将我的 repo 克隆到子目录 workspace/nodepy/ 中。由于 Jenkins 在 workspace 中运行构建,因此它会找到该包。

      当我第一次这样做时,它以某种方式创建了 nodepy/nodepy/nodepy/... 目录的无限递归。清理完工作区后,这个问题就消失了。

      【讨论】:

        【解决方案4】:

        您应该在测试过程中安装nodepy。 Jenkins 和其他测试驱动的开发工具需要能够在您安装的代码发生变化时更新它(以及验证您的安装过程是否正常工作),正确的方法是使用 .pth 链接或通过在结帐后安装它。如果你想简单地使用从 github 签出的仓库,你可以从 workspace 目录插入以下 shell 命令:

        pip install -e ./nodepy
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-06
          • 2015-09-06
          • 1970-01-01
          • 2022-11-23
          相关资源
          最近更新 更多