【问题标题】:PIP: Installing only the dependenciesPIP:仅安装依赖项
【发布时间】:2011-01-20 00:26:39
【问题描述】:

我有一个创建virtualenv 的脚本,在其中安装distributepip,然后可以选择克隆git 存储库。

现在我已经安装了我将要处理的项目。但它的依赖项没有安装。我怎样才能让pip 安装所有依赖项,就好像我发出了pip install MyApp 一样?

编辑:显然我的问题与this one 重复。

不完全确定,但pip install -e . 似乎做了我想做的事,没有太多额外的东西。我希望我的代码没有从site-packages 链接。

【问题讨论】:

  • 我有一个脚本,它创建一个 virtualenv,在其中安装分发和 pip (...)。你知道你可以用 pip -E VENV_DIR pip 做所有 3 件事,因为 pip 默认安装 pip 并在新创建的环境中分发?
  • 酷提示!不过,我不再使用提到的脚本了。

标签: python pip virtualenv distribute


【解决方案1】:

如果您的依赖项是在 setup.py 文件中定义的,您可以先将它们转储到外部文件,使用:

python setup.py egg_info

这将在YOUR_PROJECT.egg-info/requires.txt 文件中列出所有依赖项。然后您可以使用pip 安装它们:

pip install -r *.egg-info/requires.txt

【讨论】:

  • 如果你有 extra_require 这将不起作用,因为 requires.txt 将包含 [dev]
  • 如果你的 setup.py 有 extras_require 你可以在调用 pip install -r 之前把多余的行 sed 去掉
【解决方案2】:

在我的包根中发出pip install -e . 安装依赖项。

【讨论】:

  • 这是一些相当严重的副作用。 -e 以可编辑模式安装,这意味着包是从站点包链接而不是复制的。当您尝试真正安装该软件包时,我希望这种方法会引起奇怪而微妙的问题,尤其是如果您不先pip uninstall它。
  • 请注意,它目前仅适用于基于 setup.py 的构建,尚不支持 pyproject.toml。
  • 请注意,这也会尝试以某种方式安装包本身。请参阅 github.com/pypa/pip/issues/7218 以了解这会产生不良影响的示例。
  • 这显然不是正确的答案!为什么这被接受?这将比“仅安装依赖项”做得更多。
【解决方案3】:

您应该使用 pip 要求文件。

基本上,将所有要求放在文件的每一行中,然后使用命令将其传递给 pip

pip install -r requirements.txt

更重要的是,如果您有一个标准环境,pip 实际上可以使用以下命令从现有安装中转储此类文件:

pip freeze

您可以将这样生成的文件直接放入 pip 需求中,并从您的部署脚本中调用前面的命令。

很酷,不是吗? :)

【讨论】:

  • 酷,但它没有回答我的问题。我不是在寻找一种定义依赖关系的方法。完整而仔细地阅读问题有助于提供正确的答案。
  • 等等,你可以把你所有的依赖放在一个文件里,然后让 pip 为你安装它们。这不是你要找的吗?如果没有,我没有正确理解你的问题。即使是现在。
  • 不同之处在于“依赖项”的指定位置 - 在 requirements.txt 中(您可以在其中指定“myrepo==1.0.1”或其他任何内容)或在包的 setup.py 中您要安装的 myrepo。如果您已经掌握了 repo,那么只安装依赖项可能是有意义的。
  • @Tgr 我不认为这是正确的。我只是使用 pip3 通过需求文件进行安装,并安装了几个传递依赖项。
  • 问题是寻找一种方法来安装正在开发的包的依赖项。它的依赖关系将在包的setup.py 文件中声明。它甚至可以有条件依赖(比如基于操作系统)。我不认为 requirements.txt 可以处理这个问题,但即使可以,您也必须做一些额外的工作才能将需求从文件加载到setup.py
【解决方案4】:

要安装项目的依赖项(即install_requires + extra_requires),您必须使用 setuptools egg-info 提取依赖项,然后安装组合依赖项的过滤列表:

python setup.py egg_info
pip install `grep -v '^\[' *.egg-info/requires.txt`

【讨论】:

    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 2018-09-27
    • 2021-05-29
    • 2023-04-03
    • 2021-10-05
    • 2020-10-04
    • 2013-11-20
    • 2015-04-01
    相关资源
    最近更新 更多