为了账号安全,请及时绑定邮箱和手机立即绑定

如何配置python3 venv,以便相对导入在Jenkins freestyle项目中正常工作?

如何配置python3 venv,以便相对导入在Jenkins freestyle项目中正常工作?

开心每一天1111 2022-08-25 16:02:58
我有一个Jenkins工作,从我的Jenkins项目WORKSPACE中的不同Gitlab存储库中提取python文件。其中一些脚本应该由其他人导入,但我在使用相对导入时遇到了错误。值错误:尝试在顶级包之外进行相对导入script1.pyfrom ..script2/script2 import fooscript2.pydef foo():    print('Foo!')文件/目录层次结构/var/lib/jenkins/workspace/project_name    script1/        script1.py    script2/        # script2.py contains 'foo' function        script2.pyJenkins 'Execute shell' build step#!/bin/bashpython3 -m venv ${WORKSPACE}/venv. ${WORKSPACE}/venv/bin/activatepython ${WORKSPACE}/script1/script1.py 我错过了什么?
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

理想情况下,测试应在“清洁环境”中进行。因此,与其使用相对导入运行脚本测试,不如编写一个以模块形式在本地安装项目。然后,您可以编写单独的测试,您可以在其中执行。setup.pyfrom mymodule import script1.script1


如果你走这条路,你需要决定一个项目结构。没有最好的结构(见这里)。举个例子,这是我的典型结构:


├── src/

│   ├── script1/

│   │   └── script1.py

│   └── script2/

│       └── script2.py

├── tests/

│   ├── test_script1.py

│   └── test_script2.py

└── venv/

以及如下 setup.py:


import os


from setuptools import find_packages, setup


# load desc from readme

def read(fname):

    return open(os.path.join(os.path.dirname(__file__), fname)).read()


setup(

    name="mymodule",

    version="0.0.1",

    author="you",

    author_email="<you@you.com>",

    description=("short description"),

    license="<none>",

    packages=find_packages("src"),

    package_dir={"": "src"},

    long_description=read("README.md"),

    classifiers=[

        "Development Status :: 2 - Pre-Alpha",

        "Topic :: Utilities",

        # "License :: OSI Approved :: MIT License",

    ],

    install_requires=[],

)

通过此示例,您现在可以运行以安装 mymodule,然后使用 运行所有测试。这不仅可以测试您的测试,还可以检查您的软件包是否正确安装/可安装。使用虚拟环境时,将安装在此处而不是整个系统。

最后,您可以在所有文件中使用相对导入,因为您将拥有一个顶级模块“mymodule”,并且您的错误将消失。python setup.py installpytest testssetup.py


PS:如果您不喜欢导入,可以在目录中写入文件,以便能够做到甚至script1.script1__init__.pyfrom mymodule import script1from mymodule import ClassFromScript1


查看完整回答
反对 回复 2022-08-25
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号