Python依赖关系解析
项目描述
DepHell -- Python的项目管理。
为什么它比其他所有工具都好
- 格式无关。您可以使用DepHell与您喜欢的格式:setup.py、requirements.txt、Pipfile、poetry。DepHell支持它们所有以及更多。
- 在任意项目上使用您喜欢的工具。想安装基于poetry的项目,但不喜欢poetry?只需告诉DepHell将项目的元信息转换为setup.py,并用pip安装它。或者直接在DepHell中处理项目,因为DepHell可以完成您通常希望与包一起完成的所有操作。
- DepHell 不会试图取代您喜欢的工具。如果您使用 poetry,就必须使用 poetry 的文件格式和命令。然而,DepHell 可以与任何其他工具结合使用,甚至可以通过格式转换将所有这些工具组合在一起。您可以使用 DepHell、poetry 和 pip 同时进行。
- 易于扩展。DepHell 具有强大的模块化,可以轻松通过新的格式和命令进行扩展。
- 开发者友好。我们不会将所有模块放入
_internal
。此外,DepHell 还有一个庞大的生态系统,包含独立的库,因此您只需使用 DepHell 中需要的部分。 - 一站式解决方案。DepHell 可以管理依赖项、虚拟环境、测试、CLI 工具、包、生成配置、显示依赖项的许可证、协助进行安全审计、从 PyPI 获取下载统计信息、搜索包等。
- 智能依赖项解析。有时 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
来锁定它。 - 基于 asyncio。DepHell 不支持 Python 2.7,这使我们能够使用现代功能,使网络和文件系统请求尽可能快。
- 多环境。您可以拥有任意数量的项目环境。将 sphinx 依赖项与您的主环境和开发环境分开。其他工具如 pipenv 和 poetry 不支持此功能。
功能
- 管理依赖项:在格式之间转换、安装、锁定、添加新的、解决冲突。
- 管理虚拟环境:创建、删除、检查、运行 shell、在内部运行命令。
- 将 CLI 工具安装到隔离环境。
- 管理包:安装、列出、在 PyPI 上搜索。
- 构建包(用于上传到 PyPI),测试、提升项目版本。
- 发现项目依赖项的许可证、显示 过时的包、找到安全漏洞。
- 生成 .editorconfig、LICENSE、AUTHORS、.travis.yml。
查看 文档 了解更多详情。
关注 @PythonDepHell 以获取有关新功能和发布的更新。
安装
curl -L dephell.org/install | python3
查看 安装文档 了解替代方案。
支持格式
- 存档
- *.egg-info (
egginfo
) - *.tar.gz (
sdist
) - *.whl (
wheel
)
- *.egg-info (
- pip:
- requirements.txt (
pip
) - requirements.lock (
piplock
)
- requirements.txt (
- pipenv:
- Pipfile (
pipfile
) - Pipfile.lock (
pipfilelock
)
- Pipfile (
- pоetry:
- pyproject.toml (
poetry
) - poetry.lock (
poetrylock
)
- pyproject.toml (
- 环境
- 包中的导入 (
imports
)。 - 已安装的包 (
installed
)。
- 包中的导入 (
- 其他
- setup.py (
setuppy
) - flit (
flit
) - conda's environment.yml (
conda
) - pyproject.toml build-system requires (
pyproject
)
- setup.py (
用法
首先,安装 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 命令,而无需显式指定 from
和 to
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 来保持其运行。
如何帮助
- 在 Github 上给项目 star。开发者相信星星。
- 告诉你的朋友们 Gram 为你做了一件 酷事。
- 如果您对如何改进 DepHell 有任何想法,请 提交一个 issue。
- 您可以在 DepHell 生态系统 中的任何项目中做出的贡献
- 修复语法和拼写错误。
- 编写文档。
- 测试,我们总是需要更多的测试。
- 使 README 更加友好。
- 查看带有 help wanted 标签的 issue,以找到您可以解决的问题。
- 任何您想做的事情。如果您要添加新功能,请在编写代码之前提交一个 issue。
谢谢 :heart
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定该选择哪个,请了解更多关于安装包的信息。