You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI中运行pytest触发ImportError问题求助

解决Python包CI测试时的PackageNotFoundError问题

本地运行正常是因为你可能已经通过pip install -e .安装了包的开发版,Python环境中存在包的元数据;但CI环境仅拉取代码未安装包,importlib.metadata.version("bar-pack")无法找到已安装包的元数据,因此报错。

以下是几种可行的解决方案:

方案1:CI流程中先安装包(推荐)

在.gitlab-ci.yml的测试阶段,先执行包的安装命令,确保环境中存在包元数据:

test:
  stage: test
  script:
    - pip install -e .  # 安装开发版,本地代码修改后无需重新安装
    - pytest bar-pack/test -v

如果不需要开发模式,也可以用pip install .安装正式版。

方案2:修改__init__.py,不依赖已安装元数据获取版本

方法A:硬编码版本号

直接在bar-pack/__init__.py中写死版本号,简单直接:

# bar-pack/__init__.py
__version__ = "0.1.0"  # 根据实际版本修改

方法B:从setup.py读取版本号

如果版本号定义在setup.py中,可以通过读取文件内容提取:

# bar-pack/__init__.py
from pathlib import Path
import re

def get_package_version():
    setup_file = Path(__file__).parent.parent / "setup.py"
    with open(setup_file, encoding="utf-8") as f:
        setup_content = f.read()
    version_match = re.search(r'version\s*=\s*[\'"]([^\'"]+)[\'"]', setup_content)
    return version_match.group(1) if version_match else "unknown"

__version__ = get_package_version()

方法C:用setuptools-scm自动管理版本

如果用git标签管理版本,可借助setuptools-scm工具自动从git标签生成版本:

  1. 先在setup.py中配置setuptools-scm:
# setup.py
from setuptools import setup

setup(
    # 其他配置项...
    use_scm_version=True,
    setup_requires=["setuptools-scm"],
)
  1. 修改bar-pack/__init__.py:
# bar-pack/__init__.py
from setuptools_scm import get_version

__version__ = get_version(root="..", relative_to=__file__)

内容的提问来源于stack exchange,提问作者elj96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:53:25