我有一个带有下面一行的requirements.txt文件
Pillow==2.7.0
我下载了离线模式的要求,并将其放入供应商总监
pip install --download vendor -r requirements.txt
这会将文件Pillow-2.7.0-cp27-none-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel
下载到我的vendor
目录
但是当我尝试部署(推送)我的应用时,我收到以下错误:
Collecting Pillow==2.7.0 (from -r requirements.txt (line 4))
Could not find a version that satisfies the requirement Pillow==2.7.0 (from -r requirements.txt (line 4)) (from versions: )
No matching distribution found for Pillow==2.7.0 (from -r requirements.txt (line 4))
我正在使用Python Buildpack将应用程序部署到Cloud Foundry,遵循此文档http://docs.cloudfoundry.org/buildpacks/python/index.html#vendoring
答案 0 :(得分:1)
更新:另一篇文章指出你如何指定最近版本的pip标志不要拉二进制文件(我假设这是问题)。如果这解决了问题,那么你应该选择他的帖子作为解决方案。我也只是需要指出这个问题。
--download
选项只是为依赖项下载文件,但实际上没有安装它(这可能导致了为什么不推荐使用该标志,以消除这种混淆)。
pip download将--download选项替换为pip install,现在已弃用,并将在第10页中删除。
与新版本相同:
pip download ....
https://pip.pypa.io/en/stable/reference/pip_download/
现在假设您的云提供商正在阅读requirements.txt并查看您自己的供应商文件夹中的安装(不那么明智的方法),您可能会遇到任何二进制文件的各种问题,符号链接等...除非您部署的环境与本地环境匹配。像pip和需求文件这样的包系统的部分想法是如此不同的平台可以为他们的特定架构,操作系统等提取所需的库......
这种方法有很多可能出错的地方......
例如,您的mac可能正在使用不区分大小写的文件系统。如果cloudfoundry使用的是linux,那就是区分大小写的。在Mac上,如果将它们全部保存为小写,这并不重要,但在将文件复制到Linux系统时可能会出现问题,因为它希望匹配一个capitlized" P"。
答案 1 :(得分:1)
在http://docs.cloudfoundry.org/buildpacks/python/index.html#vendoring的示例中,您可以看到以下评论
将所有pip * .tar.gz提供给vendor /
*.tar.gz
包是源包,而默认情况下最近版本的pip下载二进制包。要强制使用pip下载仅源包,请使用--no-binary :all:
如果要下载二进制包,则必须根据pip download
documentation的此备注指定目标平台:
pip download
与--platform
,--python-version
,--implementation
和--abi
选项提供了获取功能 解释器和系统的依赖关系,而不是那些解释器和系统 pip正在运行。使用任何一项时都需要--only-binary=:all:
这些选择。重要的是要注意这些选项都是默认的 对当前的系统/解释器,而不是最严格的 约束(例如平台any,abi none等)。为了避免取物 碰巧碰巧匹配当前约束的依赖项 解释器(但不是你的目标),建议指定 如果您指定其中一个选项,则所有这些选项。