TravisCI中执行Python3.4测试时无法找到已安装的distro包
我之前维护旧项目的TravisCI构建时,也碰到过几乎一模一样的问题——明明依赖显示装到site-packages了,但Python3.4跑测试就是报ImportError。给你几个实际可行的排查和解决方向:
明确指定Python3.4对应的pip
TravisCI环境里可能同时存在多个Python版本,直接用pip install大概率会绑定到系统默认的Python(比如Python2.x),导致依赖装到了错误的环境。把安装命令改成:pip3.4 install -r requirements.txt确保依赖是安装给Python3.4的。
验证Python3.4的site-packages路径
在测试脚本执行前,先打印Python3.4的site-packages位置,确认distro确实在这个路径下:python3.4 -c "import site; print(site.getsitepackages())"对比输出的路径和你截图里的site-packages路径,如果不一致,说明pip把包装到了其他Python版本的环境里,用上面的
pip3.4就能解决。检查distro包的Python3.4兼容性
现在很多第三方包已经放弃了对Python3.4的支持,如果你requirements.txt里没有指定distro的版本,pip会默认安装最新版,而最新版可能不兼容3.4。试试指定一个明确支持Python3.4的旧版本,比如:# 在requirements.txt里添加 distro==1.5.0这个版本是我之前测试过能在Python3.4正常运行的。
禁用TravisCI缓存排查问题
TravisCI的缓存有时候会保留旧的依赖状态,导致新安装的包没有生效。可以在你的.travis.yml里临时添加:cache: false然后重新触发构建,看看是不是缓存导致的问题。如果解决了,再调整缓存策略只保留必要的内容。
确认虚拟环境激活状态(如果使用了)
如果你在TravisCI配置里用了virtualenv来隔离环境,一定要确保在安装依赖前激活了对应Python3.4的虚拟环境:virtualenv -p python3.4 venv source venv/bin/activate pip install -r requirements.txt不然依赖会装到全局环境,而测试脚本在虚拟环境里运行自然找不到。
内容的提问来源于stack exchange,提问作者O_o

