python 供应商依赖项无法找到加密

q43xntqr  于 2023-01-01  发布在  Python
关注(0)|答案(2)|浏览(155)

我正在尝试在Cloud Foundry中部署一个引用paramiko包的应用程序,这反过来又引用了加密包。我想用完全的构建隔离来部署这个,因此我正在出售依赖项并推送到CF。但是,当Python构建包尝试pip安装paramiko时,我面临着一个问题,它失败了,并显示加密包未找到错误。如果我尝试安装unvendored,这可以正常工作。
这是我们用来将软件包下载到vendor文件夹的命令:第一个月
这是我们面临的错误:

我在列出供应商目录的内容时看到了相关的软件包

shstlldc

shstlldc1#

您可能使用的pip版本至少为20.3或更高,而CF中的构建包可能使用的pip版本低于20.3。根据this文档,只有pip版本20.3及更高版本才能理解manylinux_x_y标记,这就是你的cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl文件是如何被标记的(manylinux_2_24)。cryptography有相同版本的其他wheel,但是有其他标签,较低版本的pip可以理解,但是你没有下载它们,因为你的pip版本理解manylinux_x_y标签。
从屏幕截图中显示的其他wheel文件来看,您的构建包必须使用pip版本19.0或更高版本,因为它成功地处理了带有manylinux2010标记的bcrypt
要提供CF能够找到的正确的wheel,请在下载命令中使用标志--platform manylinux2010_x86_64。如果它使用的是pip版本19.3或更高版本,您可以使用标志--platform manylinux2014_x86_64cryptography的wheel带有这些标签中的任何一个,当前版本(v35.0.0)和您尝试使用的版本(v3.4.8)。

lf5gs5x2

lf5gs5x22#

我遇到过类似的错误,我的PCF python buildpack无法找到我从其他环境下载到供应商文件夹(“vendored”)的一些依赖性whl文件。在我的例子中,我使用的是GitLab CI/CD管道阶段,它有一个Docker映像,我在其中pip下载文件到供应商文件夹。类似于:

pip download --index-url=https://${USERNAME}:${PASSWORD}@my_private_repo.com 
-r requirements.txt --no-binary=:none: -d vendor

其中--index-url指定了一个私有存储库来获取包,--no-binary=:none:为pip提供了优先选择wheel而不是源代码发行版的选项,-d vendor将wheel放在了一个vendor目录中
即使pip版本和python版本在我的docker映像和python buildpack之间匹配,python 3.10.5和pip 22.1.2(cf python_buildpack 1.7.56),docker映像下载的whl似乎与python buildpack不兼容。
cf push触发python构建包中供应商提供的pip install后,它产生了此错误。

ERROR: Could not find a version that satisfies the requirement cryptography (from versions: none)
          ERROR: No matching distribution found for cryptography
ERROR: Could not find a version that satisfies the requirement pillow (from versions: none)
          ERROR: No matching distribution found for pillow

导致问题的下载车轮为:加密技术-38.0.4-cp 36-abi 3-多个Linux操作系统_2_28_x86_64.whl
枕头-9.3.0-cp 310-cp 310-多个内衬_2_28_x86_64.whl
我注意到我的其他依赖项的whl文件是vendoring和工作良好,他们之间的主要区别是这两个包含manylinux_2_28.其他whl文件似乎有较低的版本.这个数字是指glibc版本的平台需要的whl见https://peps.python.org/pep-0600/#core-definition的细节.
所以看起来我把whls下载到vendor文件夹的docker镜像在linux平台上有一个比我的python buildpack更新的glibc版本,结果我指定了一个linux平台,当下载这两个依赖项时,这个平台看起来可以为我的其他whl文件工作,类似于:

pip download --index-url==https://${USERNAME}:${PASSWORD}@my_private_repo.com 
--no-cache-dir --platform manylinux2014_x86_64 
--only-binary=:all: cryptography pillow -d vendor

对我来说,这解决了问题,我认为这是因为glibc在docker和python buildpack之间是不同的,因为新的工作whls是manylinux_2_17:
加密技术-38.0.4-cp 36-abi3manylinux_2_17_x86_64.manylinux2014_x86_64.whl
枕头-9.3.0-cp 310-cp 310-多个Linux操作系统_2_17_x86_64.多个Linux操作系统2014_x86_64.whl
如果您不确定某个平台是否存在wheel,可以指定备用平台,如下所示。我已经提供了它们的示例。https://pip.pypa.io/en/stable/cli/pip_download/

python -m pip download \
   --only-binary=:all: \
   --platform manylinux1_x86_64 --platform linux_x86_64 --platform any \
   --python-version 36 \
   --implementation cp \
   --abi cp36m --abi cp36 --abi abi3 --abi none \
   SomePackage

相关问题