可以从setup.cfg安装pip,就像从需求文件安装吗?

arg*_*per 5 python pip setuptools

根据setuptools文档setuptools版本30.3.0(2016年12月8日)“允许使用配置文件(通常setup.cfg)来定义包的元数据和通常提供给其他的选择setup()功能”。与运行pip install -r requirements.txt从需求文件安装Python软件包类似,是否有办法要求pip安装配置文件install_requires选项中列出的软件包setup.cfg

Dim*_*nek 15

如果您setup.cfg属于格式良好的包,您可以执行以下操作:

pip install -e .[tests,dev]
Run Code Online (Sandbox Code Playgroud)

(安装此软件包到位,并提供给定的附加功能)

之后,您可以pip uninstall按名称该包,将 deps 保留在适当的位置。

  • 出色的!谢谢 - 我在我的项目中使用 `packages = find`,并且 `pip install -e .` 工作得非常顺利。 (2认同)

Jak*_*kul 11

如果您在 中定义了所有依赖项和其他元数据setup.cfg,只需setup.py在同一目录中创建一个最小文件,如下所示:

from setuptools import setup
setup()
Run Code Online (Sandbox Code Playgroud)

从现在开始,您可以运行pip install,它会安装所有定义的依赖项,setup.cfg就像它们在setup.py.

  • 截至 2022 年 3 月,使用 `setuptools>=61`,人们可以放弃 `setup.cfg` 转而使用 `pyproject.toml` ([文档](https://setuptools.pypa.io/en/stable/userguide/ pyproject_config.html))。“setuptools”仍在努力让人们放弃占位符“setup.py”文件,而只使用“pyproject.toml” (4认同)
  • 工作起来就像一个魅力,如[此处](https://setuptools.readthedocs.io/en/latest/setuptools.html#configuring-setup-using-setup-cfg-files)所述。 (3认同)
  • 现在甚至可以通过空的“pyproject.toml”而不是最小的“setup.py”来伴随“setup.cfg”,以允许“pip install”。(点21.3.1,Python 3.8.10) (3认同)
  • 供参考“pip install .”,与 setup.py 位于同一目录 (2认同)

rno*_*ris 6

不,pip 目前没有从setup.cfg. 它只会安装依赖项以及setup.py.

  • 或者,也许您只是想要安装要求,而不是实际的包?AFAIK,pip 没有能力读取 `setup.cfg` 本身,所有的选项都被 `setuptools.config.read_configuration` 读入 `setup.py`。 (3认同)
  • 在虚拟环境中安装依赖项以开发项目本身(不一定要安装它)。 (2认同)
  • 我认为对于 argentpepper 提到的用例,“pip install --editable .”将是一个合适的解决方案。“--editable”标志的预期用例是使开发包在安装环境中可用,并且无需重新安装包即可显示任何源更改。 (2认同)

arg*_*per 5

这是我的解决方法。我使用以下命令来分析文件中的install_requires元素,setup.cfg并使用安装软件包pip

python3 -c "import configparser; c = configparser.ConfigParser(); c.read('setup.cfg'); print(c['options']['install_requires'])" | xargs pip install
Run Code Online (Sandbox Code Playgroud)

这是上面命令行中的管道之前的Python脚本更具可读性的版本。

import configparser
c = configparser.ConfigParser()
c.read('setup.cfg')
print(c['options']['install_requires'])
Run Code Online (Sandbox Code Playgroud)