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

CentOS 6/7环境下Tox、setuptools与SCL Python版本整合经验问询

整合Tox、setuptools与CentOS SCL Python版本的实操经验

我之前在CentOS 7上折腾过rh-python34、rh-python36和Tox、setuptools的整合,踩了好几个坑,这里把我的实操经验分享出来,应该也能适配CentOS 6的场景。

1. 先搞定SCL环境的基础安装与激活

  • 首先得把对应版本的SCL包装上,比如要装rh-python36的话,执行:yum install rh-python36 rh-python36-python-devel(换版本的话把36改成34/35就行)
  • 注意SCL的Python是隔离的独立环境,默认不会加到系统全局PATH里,所以每次使用前得手动激活:scl enable rh-python36 bash。如果不想每次都输,可以把这条命令加到你的~/.bashrc里,但Tox运行时得确保能正确加载这个环境。

2. 配置Tox识别SCL的Python版本

Tox默认只会找系统PATH里的Python,所以得想办法让它识别到SCL里的隔离版本,这里有两种实用方法:

方法一:直接指定Python路径

SCL的Python一般安装在/opt/rh/rh-pythonXx/root/usr/bin/pythonX.X,比如rh-python36的路径就是/opt/rh/rh-python36/root/usr/bin/python3.6。直接在tox.ini里指定每个环境的basepython就行:

[tox]
envlist = py34, py35, py36

[testenv]
commands = pytest  # 这里换成你实际的测试命令
deps =
    pytest
    setuptools>=60.0.0  # 按需指定你需要的setuptools版本

[testenv:py34]
basepython = /opt/rh/rh-python34/root/usr/bin/python3.4

[testenv:py35]
basepython = /opt/rh/rh-python35/root/usr/bin/python3.5

[testenv:py36]
basepython = /opt/rh/rh-python36/root/usr/bin/python3.6

方法二:用SCL激活脚本做包装

如果觉得路径写死不够灵活,可以写个简单的shell脚本,比如scl_python36.sh:

#!/bin/bash
scl enable rh-python36 "python3 $@"

给脚本加执行权限:chmod +x scl_python36.sh,然后在tox.ini里把basepython指向这个脚本:

[testenv:py36]
basepython = ./scl_python36.sh

这个方法适合需要在激活SCL后做额外配置的场景,比如设置环境变量之类的。

3. 升级setuptools到兼容版本

SCL自带的setuptools版本普遍偏老(比如rh-python36自带的可能是39.x版本),而很多新的Python包要求更高版本的setuptools,这里有两种处理方式:

  • 推荐:在Tox环境内升级:直接在tox.ini的[testenv]的deps里加上setuptools>=你的目标版本,这样每个Tox测试环境都会独立安装指定版本的setuptools,不会污染SCL的基础环境。
  • 提前升级SCL基础环境:如果想让SCL环境本身的setuptools版本更高,可以激活SCL后执行:scl enable rh-python36 "pip install --upgrade pip setuptools",这样后续Tox安装依赖会更顺畅。

4. 踩过的坑及解决办法

  • 坑1:Tox提示InterpreterNotFound,找不到SCL的Python
    解决:先执行scl enable rh-python36 "which python3"确认路径是否正确,然后检查tox.ini里的basepython路径有没有写错;另外要确保运行Tox的用户有SCL目录的访问权限(一般默认没问题,除非是权限配置特殊的场景)。
  • 坑2:安装setuptools时出现ImportError或版本冲突
    解决:在Tox的deps里加上pip>=20.0.0,老版本的pip可能不支持新的setuptools版本;另外尽量避免全局环境和Tox环境混用依赖,让每个Tox环境独立管理自己的依赖包。
  • 坑3:CentOS 6上编译Python包失败
    解决:CentOS 6的系统库比较老旧,需要先装一些基础编译依赖:yum install gcc glibc-devel zlib-devel,不然像numpy这类需要编译的包会报错。

我用这套流程在CentOS 7上成功跑通了rh-python34、36的Tox测试,CentOS 6的话只要补充好系统依赖,应该也能顺利搞定。如果还有具体场景的问题,可以再细化讨论。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:44