PIP:仅安装依赖项

muh*_*huk 26 python pip distribution virtualenv distribute

我有一个脚本,可以创建virtualenv,安装distributepip在其中,然后可选地克隆一个gitrepo.

现在我已经安装了我将要开发的项目.但是没有安装它的依赖项.如何pip安装所有依赖项,就好像我已经发布了一样pip install MyApp

编辑:显然我的问题是这一个的重复.

不完全确定,但pip install -e .似乎做我想要的,没有太多额外的东西躺在身边.如果我的代码没有链接,我更喜欢site-packages.

muh*_*huk 20

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

  • 这是一些非常严重的副作用.`-e`以可编辑模式安装,这意味着包从站点包链接而不是复制.当你去尝试真正安装软件包时,我希望这种方法会导致奇怪和微妙的问题,特别是如果你不首先"卸载"它. (11认同)
  • 这显然不是正确的答案!为什么这会被接受?这将比“仅安装依赖项”做更多的事情。 (6认同)
  • 请注意,它目前仅适用于基于 setup.py 的构建,尚不支持 pyproject.toml。 (2认同)

Jak*_*kul 9

如果在setup.py文件中定义了依赖项,则可以使用以下命令将它们转储到外部文件:

python setup.py egg_info
Run Code Online (Sandbox Code Playgroud)

这将列出YOUR_PROJECT.egg-info/requires.txt文件中的所有依赖项.然后你可以使用pip以下方法安装它

pip install -r *.egg-info/requires.txt
Run Code Online (Sandbox Code Playgroud)

  • 如果您有extra_require,这将不起作用,因为require.txt将包含[dev] (2认同)

Lak*_*sad 7

您应该使用pip要求文件.

基本上,将所有需求放在一个文件中的每一行中,并使用该命令将其传递给pip

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

pip freeze
Run Code Online (Sandbox Code Playgroud)

您可以将生成的文件直接放入pip要求,然后从部署脚本中调用上一个命令.

很酷,不是吗?:)

  • 很酷,但它没有回答我的问题.我不是在寻找一种定义依赖关系的方法.完整而仔细地阅读问题有助于提供正确的答案. (14认同)
  • 等等,您可以将所有依赖项放在一个文件中,并请求pip为您安装所有依赖项.这不是你想要的吗?如果没有,我没有正确理解你的问题.即使是现在. (8认同)
  • 区别在于,其中"依赖性"被指定 - 在requirements.txt(在这里您将指定"myrepo == 1.0.1"或其他),或在包中myrepo要安装setup.py.如果你已经掌握了repo,那么只安装依赖项可能有意义. (2认同)
  • 问题是寻求一种安装*正在开发的包*的依赖项的方法。它的依赖项将在包的 `setup.py` 文件中声明。它甚至可以有条件依赖(比如基于操作系统)。我不认为 requirements.txt 可以处理这个,但即使可以,你也必须做一些额外的工作来将需求从文件加载到 `setup.py` 中。 (2认同)
  • 这不太正确,因为“setup.py”和“requirements.txt”用于不同的目的,并且它们的角色不可互换。请参阅Python打包文档:https://packaging.python.org/discussions/install-requires-vs-requirements/#requirements-files (2认同)

jfa*_*iro 5

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

python setup.py egg_info
pip install `grep -v '^\[' *.egg-info/requires.txt`
Run Code Online (Sandbox Code Playgroud)


Sal*_*alo 5

您可以使用pip-tools创建一个requirements.txt仅包含包的依赖项的文件:

$ pip-compile -o requirements.txt setup.py
Run Code Online (Sandbox Code Playgroud)

请注意,上述命令仅在您还没有文件时才有效requirements.txt。如果您碰巧已经有一个,请将其删除。

使用生成的文件,requirements.txt您可以运行 pip 来安装依赖项:

$ pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

奖金1:

其中requirements.txt将包含指示相关依赖项源自何处的注释。

奖金2:

如果您有一个extras_require可选依赖项的部分setup.py,如下所示:

$ pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

requirements.txt您可以使用以下方法创建包括可选依赖项的内容:

    ...
    extras_require={
        "development": [
            "wheel",
            "debugpy",
            "pytest",
        ],
    },
    ...
Run Code Online (Sandbox Code Playgroud)