求助:为什么whl包在容器环境安装失败?

新手上路,请多包涵

linux镜像创建的容器环境,环境中没有配置python相关配置,执行脚本安装pip后使用pip安装一个远程py仓库的whl包,whl包在安装时报了异常,如下:

ERROR: Could not find a version that satisfies the requirement requests==2.20.1 (from yjietest) (from versions: none)
ERROR: No matching distribution found for requests==2.20.1 (from yjietest)

whl包项目的requirements.txt配置为:

requests==2.20.1
requests-toolbelt==0.9.1

执行的脚本代码为:

if command -v python > /dev/null 2>&1;then 
   wget https://bootstrap.pypa.io/pip/2.7/get-pip.py -O get-pip.py 
   python get-pip.py
fi

if command -v python3 > /dev/null 2>&1;then 
   wget https://bootstrap.pypa.io/pip/3.6/get-pip.py -O get-pip.py 
   python3 get-pip.py
fi


if command -v pip > /dev/null 2>&1;then 
pip install yjietest  -i https://mirrors.**.com/repository/pypi/**/simple/ --extra-index-url https://mirrors.**.com/repository/pypi/**/simple/ --trusted-host mirrors.**.com --verbose
fi
if command -v pip3 > /dev/null 2>&1;then
   alias pip=pip3
   pip3 install yjietest  -i https://mirrors.**.com/repository/pypi/**/simple/ --extra-index-url https://mirrors.**.com/repository/pypi/**/simple/ --trusted-host mirrors.**.com --verbose
fi

当使用的包格式为tar.gz时可以正常安装,因为没有主动去安装包所需依赖,因此可以正常安装,现在需要改成使用whl包的方式,按我对whl格式的理解,whl包中是有所需依赖的二进制文件的,为什么还会触发这个问题?

阅读 831
avatarAI BotBETA
### 回答

这个问题通常与以下几个因素有关:

1. **Python 版本不兼容**:
   - `requests==2.20.1` 可能不支持你当前容器中的 Python 版本。确保你的 Python 版本与 `requests==2.20.1` 兼容。你可以检查 `requests==2.20.1` 支持的 Python 版本,并确认你的容器环境使用的是兼容的版本。

2. **pip 版本过旧**:
   - 使用的 pip 版本可能过旧,无法正确解析或安装某些包。尽管你尝试通过脚本安装 pip,但安装的 pip 版本可能仍然不够新,无法处理特定的依赖关系或仓库。尝试更新 pip 到最新版本,然后再次尝试安装。

3. **仓库源问题**:
   - 你使用的自定义 PyPI 镜像源 (`https://mirrors.**.com/repository/pypi/**/simple/`) 可能不包含 `requests==2.20.1`。尽管你使用了 `--extra-index-url` 和 `--trusted-host` 选项,但如果主源和额外源都没有这个版本的包,pip 仍然会报错。检查你的镜像源是否包含所需版本的包。

4. **wheel 包问题**:
   - 尽管 whl 包通常包含所需的二进制文件,但它仍然依赖 pip 来正确解析和安装依赖关系。如果 pip 无法正确解析这些关系(可能是因为版本不兼容或配置错误),安装仍然会失败。

5. **别名使用不当**:
   - 在脚本中,你使用了 `alias pip=pip3`。这个别名可能在某些情况下不起作用,特别是在脚本的不同部分或子 shell 中。建议直接使用 `pip3` 而不是通过别名调用,以避免潜在的混淆。

### 解决方案

1. **确认 Python 版本**:
   - 检查并确认你的容器环境使用的 Python 版本与 `requests==2.20.1` 兼容。

2. **更新 pip**:
   - 在安装 `yjietest` 之前,确保 pip(或 pip3)已更新到最新版本。

3. **检查 PyPI 镜像源**:
   - 确认你使用的 PyPI 镜像源包含 `requests==2.20.1`。你可以尝试切换到官方 PyPI 源进行安装,看是否能成功。

4. **直接使用 pip3**:
   - 避免使用 `alias`,直接在脚本中使用 `pip3` 命令。

5. **调试和日志**:
   - 增加更多的日志输出,以便更好地理解安装过程中发生了什么。你可以通过增加 `--verbose` 选项来获取更详细的输出。

通过这些步骤,你应该能够诊断并解决问题。如果问题仍然存在,可能需要更详细地检查 `yjietest` 包的依赖关系,或者考虑是否有其他环境因素影响安装过程。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏