跳转到主要内容

Python依赖关系解析

项目描述

DepHell

pypi MIT License Travis CI Powered by DepHell

DepHell -- Python的项目管理。

为什么它比其他所有工具都好

  1. 格式无关。您可以使用DepHell与您喜欢的格式:setup.py、requirements.txt、Pipfile、poetry。DepHell支持它们所有以及更多。
  2. 在任意项目上使用您喜欢的工具。想安装基于poetry的项目,但不喜欢poetry?只需告诉DepHell将项目的元信息转换为setup.py,并用pip安装它。或者直接在DepHell中处理项目,因为DepHell可以完成您通常希望与包一起完成的所有操作。
  3. DepHell 不会试图取代您喜欢的工具。如果您使用 poetry,就必须使用 poetry 的文件格式和命令。然而,DepHell 可以与任何其他工具结合使用,甚至可以通过格式转换将所有这些工具组合在一起。您可以使用 DepHell、poetry 和 pip 同时进行。
  4. 易于扩展。DepHell 具有强大的模块化,可以轻松通过新的格式和命令进行扩展。
  5. 开发者友好。我们不会将所有模块放入 _internal。此外,DepHell 还有一个庞大的生态系统,包含独立的库,因此您只需使用 DepHell 中需要的部分。
  6. 一站式解决方案。DepHell 可以管理依赖项、虚拟环境、测试、CLI 工具、包、生成配置、显示依赖项的许可证、协助进行安全审计、从 PyPI 获取下载统计信息、搜索包等。
  7. 智能依赖项解析。有时 pip 和 pipenv 无法锁定您的依赖项。尝试执行 pipenv install oslo.utils==1.4.0。Pipenv 无法处理它,但 DepHell 可以:使用 dephell deps add --from=Pipfile oslo.utils==1.4.0 添加新的依赖项,并使用 dephell deps convert --from=Pipfile --to=Pipfile.lock 来锁定它。
  8. 基于 asyncio。DepHell 不支持 Python 2.7,这使我们能够使用现代功能,使网络和文件系统请求尽可能快。
  9. 多环境。您可以拥有任意数量的项目环境。将 sphinx 依赖项与您的主环境和开发环境分开。其他工具如 pipenv 和 poetry 不支持此功能。

功能

查看 文档 了解更多详情。

关注 @PythonDepHell 以获取有关新功能和发布的更新。

安装

curl -L dephell.org/install | python3

查看 安装文档 了解替代方案。

支持格式

  1. 存档
    1. *.egg-info (egginfo)
    2. *.tar.gz (sdist)
    3. *.whl (wheel)
  2. pip:
    1. requirements.txt (pip)
    2. requirements.lock (piplock)
  3. pipenv:
    1. Pipfile (pipfile)
    2. Pipfile.lock (pipfilelock)
  4. pоetry:
    1. pyproject.toml (poetry)
    2. poetry.lock (poetrylock)
  5. 环境
    1. 包中的导入 (imports)。
    2. 已安装的包 (installed)。
  6. 其他
    1. setup.py (setuppy)
    2. flit (flit)
    3. conda's environment.yml (conda)
    4. pyproject.toml build-system requires (pyproject)

用法

首先,安装 DepHell 并启用自动补全

python3 -m pip install --user dephell[full]
dephell self autocomplete

让我们来获取 sampleproject 并让它变得更好。

git clone https://github.com/pypa/sampleproject.git
cd sampleproject

此项目使用 setup.py 来处理依赖项和元信息。然而,对于大多数项目来说,这种格式过于复杂。让我们将其转换为 poetry

dephell deps convert --from=setup.py --to=pyproject.toml

这将生成下一个 pyproject.toml

[tool.poetry]
name = "sampleproject"
version = "1.2.0"
description = "A sample Python project"
authors = ["The Python Packaging Authority <pypa-dev@googlegroups.com>"]
readme = "README.md"

[tool.poetry.scripts]
sample = "sample:main"

[tool.poetry.dependencies]
python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4,>=2.7"
coverage = {optional = true}
peppercorn = "*"

[tool.poetry.dev-dependencies]
check-manifest = "*"

[tool.poetry.extras]
test = ["coverage"]

现在,让我们生成一些有用的文件

dephell generate authors

dephell generate license MIT

# https://editorconfig.org/
dephell generate editorconfig

我们的用户可能还没有安装 poetry,但他们很可能有 pip 并可以从 setup.py 中安装文件。让我们让它更容易从我们的 pyproject.toml 生成 setup.py。此外,它将 DepHell 指定为默认的依赖文件。在 pyproject.toml 中添加以下行

[tool.dephell.main]
from = {format = "poetry", path = "pyproject.toml"}
to = {format = "setuppy", path = "setup.py"}

您可以在 DepHell 自己的 pyproject.toml 中看到一个完整的、真实的配置示例。

现在我们可以调用 DepHell 命令,而无需显式指定 fromto

dephell deps convert

它将根据 pyproject.toml 生成 setup.py 和 README.rst,以及 README.md。

现在让我们在虚拟环境中测试我们的代码

$ dephell venv run pytest
WARNING venv does not exist, creating... (project=/home/gram/Documents/sampleproject, env=main, path=/home/gram/.local/share/dephell/venvs/sampleproject-Whg0/main)
INFO venv created (path=/home/gram/.local/share/dephell/venvs/sampleproject-Whg0/main)
WARNING executable does not found in venv, trying to install... (executable=pytest)
INFO build dependencies graph...
INFO installation...
# ... pip output
# ... pytest output

我们现在可以激活我们的项目的虚拟环境并在其中运行任何命令

dephell venv shell

呃,我们有测试,但依赖文件中没有 pytest。让我们添加它

dephell deps add --envs dev test -- pytest

之后,我们的开发依赖项看起来是这样的

[tool.poetry.dev-dependencies]
check-manifest = "*"
pytest = "*"

[tool.poetry.extras]
test = ["coverage", "pytest"]

最终我们将有更多的依赖项。让我们看看我们有多少个

$ dephell deps tree
- check-manifest [required: *, locked: 0.37, latest: 0.37]
- coverage [required: *, locked: 4.5.3, latest: 4.5.3]
- peppercorn [required: *, locked: 0.6, latest: 0.6]
- pytest [required: *, locked: 4.4.0, latest: 4.4.0]
  - atomicwrites [required: >=1.0, locked: 1.3.0, latest: 1.3.0]
  - attrs [required: >=17.4.0, locked: 19.1.0, latest: 19.1.0]
  - colorama [required: *, locked: 0.4.1, latest: 0.4.1]
  - funcsigs [required: >=1.0, locked: 1.0.2, latest: 1.0.2]
  - more-itertools [required: <6.0.0,>=4.0.0, locked: 5.0.0, latest: 7.0.0]
    - six [required: <2.0.0,>=1.0.0, locked: 1.12.0, latest: 1.12.0]
  - more-itertools [required: >=4.0.0, locked: 7.0.0, latest: 7.0.0]
  - pathlib2 [required: >=2.2.0, locked: 2.3.3, latest: 2.3.3]
    - scandir [required: *, locked: 1.10.0, latest: 1.10.0]
    - six [required: *, locked: 1.12.0, latest: 1.12.0]
  - pluggy [required: >=0.9, locked: 0.9.0, latest: 0.9.0]
  - py [required: >=1.5.0, locked: 1.8.0, latest: 1.8.0]
  - setuptools [required: *, locked: 41.0.0, latest: 41.0.0]
  - six [required: >=1.10.0, locked: 1.12.0, latest: 1.12.0]

嗯...是不是看起来那么多?让我们看看它们的大小。

$ dephell inspect venv --filter=lib_size
11.96Mb

呃...好的,它是 Python。它们是实际的吗?

$ dephell deps outdated
[
  {
    "description": "More routines for operating on iterables, beyond itertools",
    "installed": [
      "5.0.0"
    ],
    "latest": "7.0.0",
    "name": "more-itertools",
    "updated": "2019-03-28"
  },
]

Pytest 需要 more-itertools 的旧版本。这是正常的。

如果我们的测试和依赖项没有问题,那么是时候部署了。首先,增加项目版本

$ dephell project bump minor
INFO generated new version (old=1.2.0, new=1.3.0)

然后构建包

$ dephell project build
INFO dumping... (format=setuppy)
INFO dumping... (format=egginfo)
INFO dumping... (format=sdist)
INFO dumping... (format=wheel)
INFO builded

现在,我们可以将这些包上传到 PyPI

dephell self auth upload.pypi.org my-username my-password
dephell project upload

这些是一些最有用的命令。有关更多详细信息,请参阅 文档

兼容性

DepHell 在 Linux 和 Mac OS X 上使用 Python 3.5、3.6、3.7 进行了测试。其中最酷的事情之一是 DepHell 在 Travis CI 上由 DepHell 运行。

DepHell 适用于 Windows,但还没有 CI 来保持其运行。

如何帮助

  1. 在 Github 上给项目 star。开发者相信星星。
  2. 告诉你的朋友们 Gram 为你做了一件 酷事
  3. 如果您对如何改进 DepHell 有任何想法,请 提交一个 issue
  4. 您可以在 DepHell 生态系统 中的任何项目中做出的贡献
    1. 修复语法和拼写错误。
    2. 编写文档。
    3. 测试,我们总是需要更多的测试。
    4. 使 README 更加友好。
    5. 查看带有 help wanted 标签的 issue,以找到您可以解决的问题。
    6. 任何您想做的事情。如果您要添加新功能,请在编写代码之前提交一个 issue。

谢谢 :heart

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定该选择哪个,请了解更多关于安装包的信息

源代码分发

dephell-0.8.3.tar.gz (220.1 kB 查看哈希值)

上传时间 源代码

构建分发

dephell-0.8.3-py3-none-any.whl (204.2 kB 查看哈希值)

上传时间 Python 3

支持