Wol*_*wig 9 python django pip downgrade
我的 python 虚拟环境中安装了 Django 1.10.5。
pip install djblets不幸的是,当我使用 将 djblets 安装到我的 virtualenv 中时,Django 在此过程中被隐式降级到 1.8.17 版。这打破了我的环境。
我可以做些什么来防止这种情况发生?我当然没有被问到我是否同意降级。但我真的应该有。
djblets 0.9.6 版本甚至没有安装,因为它依赖于拒绝构建的 Pillow。因为卸载是第一位的,所以这一切都被破坏了,并在此过程中杀死了我的环境。
我所能想到的就是在一个单独但相同的虚拟环境中尝试安装,然后看看会发生什么。就像空运一样。
现在我必须从头开始安装我的环境。我错过了什么,或者这就是它的方式?
实际上,在较新的(好吧,很久以前,pip 7.1)pip 版本中有,尽管它没有完全记录如下:
因此,以下命令(您需要在项目目录中运行它们并可能自定义它们):
pip freeze | grep == | sed 's/==/>=/' >constraints.txt
pip install -c constraints.txt whatever-you-want-to-install
Run Code Online (Sandbox Code Playgroud)
将安装您想要安装的任何内容,而无需降级任何内容。警告:无论您想要安装什么,实际上都需要较低版本的“sometoy”,无论您想要安装什么,都会被破坏,至少与它的“sometoy”的使用有关。
在某些情况下,损坏可能是可以接受的(例如,它发生在您不使用的包的某些可选区域中),在某些情况下,可能不会发生实际的损坏(例如,不再需要导致降级的版本约束),在某些情况下非常糟糕的事情将会发生,而且它们会降临在你身上。
您需要同时安装这两个软件包(只需一个命令)并指定软件包的版本号
pip install django==1.10.5 djblets
Run Code Online (Sandbox Code Playgroud)
根据经验,我建议使用文件,而不是逐一安装软件包requirements.txt。
对于您的示例,您的文件requirements.txt将(至少):
django==1.10.5
djblets==1.0.2
Run Code Online (Sandbox Code Playgroud)
[--requirements, -r]然后,您可以使用以下选项一次性安装所有软件包pip:
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
为什么?
除非明确告知,否则pip将尝试安装给定模块的最佳依赖项(包本身中描述的依赖项),这甚至可能降级包!
通常,您无法选择降级或升级软件包以使其正常工作。这就是为什么在您需要的每个包中添加版本号以避免回归非常重要!
尖端
您可以在 PyPI 中找到包的版本号- Python 包索引
[-U, --upgrade]或者使用以下选项自动安装最新版本pip:
pip install -U django==1.10.5 djblets
Run Code Online (Sandbox Code Playgroud)(好的,因为update该选项仅适用于具有未指定版本号的软件包)
[--no-deps]您还可以使用以下选项安装完全没有依赖项的软件包pip:
pip install --no-deps djblets
Run Code Online (Sandbox Code Playgroud)但此方法仅在您已经安装了所有依赖项时才有效。
奖金
要回答您没有问的问题,如果您害怕执行错误的操作,可以使用 pip freeze制作所有安装的软件包的“快照”
pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3620 次 |
| 最近记录: |