我是否可以使用pip仅使直接安装的软件包保持最新?

我是否可以使用pip仅使直接安装的软件包保持最新?,pip,Pip,如何列出直接使用pip安装的软件包,从而忽略已安装的任何依赖项 我有一个运行过的virtualenv,命令如下 $ pip install A B C $ pip install X Y Z 因此,我不仅安装了a、B、C、X、Y和Z,而且还安装了p、q、r、s、t、u、v和w。但看看任何给定的包,我都记不起它是否是我直接安装的。我想保持这个venv中直接安装的软件包的最新版本,比如 $ pip install -U --directly-installed 这就产生了 $ pip insta

如何列出直接使用
pip
安装的软件包,从而忽略已安装的任何依赖项

我有一个运行过的virtualenv,命令如下

$ pip install A B C
$ pip install X Y Z
因此,我不仅安装了a、B、C、X、Y和Z,而且还安装了p、q、r、s、t、u、v和w。但看看任何给定的包,我都记不起它是否是我直接安装的。我想保持这个venv中直接安装的软件包的最新版本,比如

$ pip install -U --directly-installed
这就产生了

$ pip install -U A B C X Y Z

是否有办法仅使直接安装的软件包明确保持最新(仅根据这些软件包的要求更新其依赖项)?

来自pip文档:

--升级策略 确定应如何处理依赖项升级[默认:仅在需要时]。“渴望”-无论当前安装的版本是否满足升级包的要求,都会升级依赖项。“仅在需要时”-仅在不满足升级包的要求时升级。 因此,您想要的似乎已经是默认行为,但如果您想要明确:

pip install -U --upgrade-strategy only-if-needed A B C X Y Z
pip install-U——只有在需要时才升级策略在作业中,我们手动处理直接安装的软件包列表。也就是说,如果我们需要一个包,我们将它添加到
requirements.txt
并运行

pip install -r requirements.txt
然后我们跑

pip freeze > requirements-freezed.txt
保存包和依赖项的整个列表。当我们需要重新创建虚拟环境时,我们运行

pip install -r requirements-freezed.txt
仅升级直接安装的软件包的任务将是

pip install -U -r requirements.txt
pip freeze > requirements-freezed.txt

对不起:我不记得什么是B C X Y Z!如果我记得有哪些软件包是我要求的,哪些是作为依赖项安装的,那就没有问题了。也许这个答案对你会有用:它链接到一个实用程序,它可以为你的项目提取最小的环境。我没有用过,所以我不能保证。。。除此之外,您还可以尝试分别升级每个感兴趣的包。如果您不知道要更新什么,那么为什么要更新任何东西呢?您不能,因为
pip
不会跟踪包是显式安装的还是作为依赖项安装的。使用
pipdeptree
pipchill
等工具,您可以获得“顶级”包的列表,因为它们不是其他包的依赖项。这些绝对是您明确安装的(除了
pip
setuptools
wheel
,如果您在venv中)。但是,此列表不够完整/可靠-例如,假设您
pip install numpy
,然后
pip install scipy
。现在,虽然显式安装了
numpy
,但它成为了
scipy
的一个依赖项,因此它不再被列为“顶级”软件包。@hoefling听起来像是答案:我需要返回并冻结,弄清楚我直接安装的是什么,删除
requirements.txt
,然后只删除
pip-U requirements.txt
。对吧?对。在你有了一个干净的需求文件后,把它当作一个“世界”文件来处理,你把所有要安装的软件包都放在这个文件里,正如@phd在他的回答中所描述的那样:
pkg
的安装现在变得像
echo-pkg>>world.txt&&pip-install-r-world.txt
。将使用该virtualenv的virtualenv安装包中的
pip
,或者当运行
pip
时,virtualenv是否也需要激活?virtualenv需要激活,但您可以通过从
bin/
dir运行
python
pip
半魔术般地激活它。类似于
/path/to/virt/env/bin/python-m pip install…
有一个关于如何在PyCharm外部工具中应用它的问题。