如何更新/安装gcovr以匹配我更新的编译器gcc

2024-09-30 22:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有Ubuntu18.04和gcc版本7

我使用备选方案将gcc更新到了版本8,并将我的gcov版本也修改到了gcc,以保持它们的兼容性(这在nicley中起到了作用),但是gcovr本身在版本3.4上卡住了,它需要~4.x版本

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 \
        --slave /usr/bin/g++ g++ /usr/bin/g++-7                            \
        --slave /usr/bin/gcov gcov /usr/bin/gcov-7
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 \
        --slave /usr/bin/g++ g++ /usr/bin/g++-8                            \
        --slave /usr/bin/gcov gcov /usr/bin/gcov-8

我进行了一些挖掘,我认为gcovr只是一个python脚本。我安装了Python2.7,也安装了python.36

我尝试使用pip安装gcovr:

sudo -H pip install gcovr
Requirement already satisfied: gcovr in /usr/lib/python2.7/dist-packages

此网站显示我需要的版本:here

相关表格如下:

Python  gcovr
2.6     3.4
3.4     4.1

所以我知道我想要什么,我需要去哪里,但我不知道如何去那里。我认为我的pip install命令调用了python2.7pip(我的python知识基本上为零),因此我感觉需要调用python3.6的pip来获得我想要的gcovr版本(可能离这里很远)。知道我有各种版本的python,我的默认版本似乎是2.7:python --version: 2.7

有什么线索可以告诉我如何更新gcovr(甚至我的python版本默认为3.x)

更新1

我走得更远了一点。我安装了python替代方案:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2

现在我可以在Python2.x和3.x之间切换。当我将python设置为3.x并尝试安装gcovr时,我得到:

sudo -H pip install gcovr
Collecting gcovr
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Could not find a version that satisfies the requirement gcovr (from versions: )
No matching distribution found for gcovr

我想我可以下载一个更新版本的gcovr脚本


Tags: installpip版本nonebinusrconnectsudo
2条回答

更新gcovr使之与gcc内联有点棘手-我上面提到的所有步骤都是有效的,应该可以工作-所以我将这个问题留在这里,因为我认为它有一些价值,我在其他任何地方都找不到这个方法

我困惑的最后一个部分是,我需要使用本地镜像,以便通过运行:

sudo pip install  index-url=https://xxxxxxx/artifactory/api/pypi/pypi/simple gcovr  user

将python备选方案设置为Python3.x,然后在版本4安装gcovr。然后我的覆盖命令都开始正常工作了

但是如果您不想切换到Python3.x,那么(只要您安装了pythong 3.x,您就可以使用pip3而不是pip来执行相同的命令,这还没有经过我的测试

Gcovr独立于GCC版本,但GCC 8对覆盖范围格式做了轻微更改。这些更改首先在gcovr 4.0中实现,但在gcovr 4.2中添加了进一步的改进。如果在路径中使用的编译器不是名为gccg++的编译器,则应告知gcovr需要使用哪个gcov版本(例如gcovr gcov-executable gcov-7 ...

本例中的问题是pythonpip通常指的是Python 2.7版本,而不是Python 3版本。Python3.x的变体有python3pip3两种。因此,正确的调用应该是:

$ sudo pip3 install gcovr

(如果安装到您的主目录中,也可以不使用sudo。)

如果要为特定python安装gcovr,可以像python -m pip ...一样调用pip:

$ sudo /path/to/your/python3 -m pip install gcovr

如果要升级现有已安装的Python包,必须明确告知pip:

$ pip install -U gcovr

但是,您不能使用pip更新通过apt安装的软件包。相反,请先删除apt软件包,例如使用sudo apt-get remove gcovr

要安装特定的gcovr版本,请使用类似gcovr == 4.2的需求规范(但请记住使用引号):

$ pip3 install 'gcovr == 4.2'

除非您的本地网络环境(例如,如果您没有internet连接)要求您使用镜像,否则您不应该使用镜像。如果你受到TLS拦截(本质上是一个中间人的攻击,它破坏了普通的证书验证),那么你可能想用PUP来告诉你的替代CA,{{CD11}}。但是,如果您不想从PyPI安装,也可以从Github安装,例如,对于开发版本pip install git+https://github.com/gcovr/gcovr.git,或者对于特定版本pip install https://github.com/gcovr/gcovr/archive/4.2.tar.gz

升级gcovr时,还请阅读变更日志,因为在某些边缘情况下,存在破坏兼容性的变更,例如,围绕参数处理或查找源版本的启发式。在某些情况下,这可能会改变覆盖率指标

还请注意,Python2是EOL,不再受支持。下一个gcovr版本(预计为4.3)将放弃对Python2.x和3.5的支持。即使Python2.7已经死了,您也不应该将python更改为参考Python3–这将破坏系统上的许多程序,可能包括重要的操作系统组件。相反,如果需要Python 3,请始终显式使用python3

相关问题 更多 >