首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >告诉pip安装需求文件中列出的包的依赖项。

告诉pip安装需求文件中列出的包的依赖项。
EN

Stack Overflow用户
提问于 2012-04-26 12:52:45
回答 5查看 191.6K关注 0票数 66

开发Django web应用程序时,我需要安装在虚拟环境中的软件包列表。可以这样说:

代码语言:javascript
复制
Django==1.3.1
--extra-index-url=http://dist.pinaxproject.com/dev/
Pinax==0.9b1.dev10
git+git://github.com/pinax/pinax-theme-bootstrap.git@cff4f5bbe9f87f0c67ee9ada9aa8ae82978f9890
# and other packages

最初,我在开发过程中一个接一个地手动安装了它们。这安装了所需的依赖项,在部署应用程序之前,我最终使用了pip freeze

问题是,当我升级一些包时,一些依赖项不再被使用,也不再需要,但是它们一直被pip freeze列出。

现在,我想以这样的方式建立一个新的虚拟环境:

  • 将所需的包(没有依赖项)放在需求文件中, 就像manual-requirements.txt
  • 用它们的依赖项安装它们 pip install -r manual-requirement.txt (←问题,这不安装依赖项)
  • 冻结完整的虚拟主机 pip freeze -r manual-requirements.txt > full-requirements.txt 然后部署。

有什么方法可以做到这一点,而不需要手动重新安装包在一个新的虚拟环境中,以获得他们的依赖?这很容易出错,我想要自动化从不再需要更长时间的旧依赖项中清除虚拟环境的过程。

编辑:实际上,pip确实安装了需求文件中没有显式列出的依赖项,即使文献资料告诉我们这些文件是平面的。我想要安装哪些依赖项,我错了。对于没有安装所有依赖项的pip,我会让任何有疑问的人提出这个问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-26 14:11:41

考虑到您对这个问题的评论(在这个问题中,您说对单个包执行安装就像预期的那样工作),我建议对您的需求文件进行循环。在巴什:

代码语言:javascript
复制
#!/bin/sh
while read p; do
  pip install $p
done < requirements.pip

哈哈!

票数 26
EN

Stack Overflow用户

发布于 2013-01-06 12:35:37

只需使用:

代码语言:javascript
复制
pip install -r requirements.txt

这将安装requirements.txt文件中列出的所有依赖项。

票数 69
EN

Stack Overflow用户

发布于 2016-02-15 14:03:03

有什么方法可以做到这一点,而不需要手动重新安装包在一个新的虚拟环境中,以获得他们的依赖?这很容易出错,我想要自动化从不再需要更长时间的旧依赖项中清除虚拟环境的过程。

这就是pip包的用途(来自https://github.com/jazzband/pip-tools):

安装

代码语言:javascript
复制
$ pip install --upgrade pip  # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools

pip编译的示例用法

假设您有一个水瓶项目,并希望将其用于生产。将以下行写入文件:

代码语言:javascript
复制
# requirements.in
Flask

现在,运行pip编译requirements.in:

代码语言:javascript
复制
$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
#    pip-compile requirements.in
#
flask==0.10.1
itsdangerous==0.24        # via flask
jinja2==2.7.3             # via flask
markupsafe==0.23          # via jinja2
werkzeug==0.10.4          # via flask

它将生成您的requirements.txt,并将所有的Flask依赖项(和所有基础依赖项)固定在一起。将此文件置于版本控制之下,并定期重新运行pip-compile以更新包。

pip-sync的示例用法

现在您有了一个requirements.txt,您可以使用pip-sync更新虚拟env,以准确地反映其中的内容。注意:这将安装/升级/卸载匹配requirements.txt内容所需的一切。

代码语言:javascript
复制
$ pip-sync
Uninstalling flake8-2.4.1:
  Successfully uninstalled flake8-2.4.1
Collecting click==4.1
  Downloading click-4.1-py2.py3-none-any.whl (62kB)
    100% |████████████████████████████████| 65kB 1.8MB/s
  Found existing installation: click 4.0
    Uninstalling click-4.0:
      Successfully uninstalled click-4.0
Successfully installed click-4.1
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10333814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档