我在我的python虚拟环境中安装了Django 1.10.5。
当我用pip install djblets
将djblets安装到我的virtualenv中时,遗憾的是,Django在此过程中被隐式降级为版本1.8.17。这打破了我的环境。
我能做些什么来阻止这种情况吗?我当然不被问到我是否对降级感到满意。但我真的应该拥有。
djblets版本0.9.6甚至没有安装,因为它依赖于拒绝构建的Pillow。这一切都刚刚破坏并导致我的环境一路走来,因为首先是卸载。
我能想到的只是在一个单独但相同的虚拟环境中尝试安装,看看会发生什么。就像干跑一样。
现在我必须从头开始安装我的环境。我错过了什么,或者这只是它的方式?
答案 0 :(得分:1)
您需要同时安装两个软件包(只有一个命令)并指定软件包的数字版本
pip install django==1.10.5 djblets
根据经验,我不是一个一个地安装您的软件包,而是建议您使用requirements.txt
文件。
对于您的示例,您的文件requirements.txt
将(至少):
django==1.10.5
djblets==1.0.2
然后,您可以使用pip
选项[--requirements, -r]
一次安装所有包:
pip install -r requirements.txt
<强>为什么吗
除非明确告知,pip
将尝试为给定模块(包本身中描述的模块)安装最佳依赖项,甚至可以降级一个包!
通常情况下,您无法选择降级NOR升级包以使其正常工作。这就是为什么在每个需要的软件包中添加版本号非常重要的原因,以避免回归!
<强>提示强>
使用pip
选项[-U, --upgrade]
自动安装最新版本:
pip install -U django==1.10.5 djblets
(好的,因为update
选项仅适用于具有未指定版本号的软件包)
您还可以使用pip
选项[--no-deps]
来安装完全没有依赖关系的包:
pip install --no-deps djblets
但是,只有安装了所有依赖项后,此方法才有效。
<强>加成强>
要回答你没有提出的问题,你可以制作一个&#34;快照&#34;如果您害怕使用pip freeze
进行错误的操作,请安装所有软件包pip freeze > requirements.txt
答案 1 :(得分:0)
实际上并没有较新的文档版本(好吧,很久很久以前就是pip 7.1),尽管并没有完全记录如下:
因此,以下命令(您需要在项目目录中运行它们并可能对其进行自定义):
pip freeze | grep == | sed 's/==/>=/' >constraints.txt
pip install -c constraints.txt whatever-you-want-to-install
将安装您想要安装的任何东西而不会降级任何东西。警告:无论您要安装什么,实际上都需要较低版本的“ sometoy”,无论您要安装什么,都将被破坏,至少与“ sometoy”的使用有关。
在某些情况下,破损可能是可以接受的(例如,在您不使用的软件包的某些可选区域中发生),在某些情况下,可能不会发生实际的破损(例如,不再需要降级的版本约束),在某些情况下,真正糟糕的事情会发生,它们就在你身上。