Skip to main content

Dependency resolution for Python

Project description



.. image:: ./assets/logo.png
:target: ./assets/logo.png
:alt: DepHell

=============================================================================


.. image:: https://img.shields.io/pypi/l/dephell.svg
:target: https://github.com/dephell/dephell/blob/master/LICENSE
:alt: MIT License


.. image:: https://travis-ci.org/dephell/dephell.svg?branch=master
:target: https://travis-ci.org/dephell/dephell
:alt: Travis CI


.. image:: ./assets/badge.svg
:target: ./docs/badge.md
:alt: Powered by DepHell


**DepHell** -- dependency management for Python.


* Manage dependencies: `convert between formats <https://dephell.readthedocs.io/en/latest/cmd-deps-convert.html>`_\ , `install <https://dephell.readthedocs.io/en/latest/cmd-deps-install.html>`_\ , lock, `add new <https://dephell.readthedocs.io/en/latest/cmd-deps-add.html>`_\ , resolve conflicts.
* Manage virtual environments: `create <https://dephell.readthedocs.io/en/latest/cmd-venv-create.html>`_\ , `remove <https://dephell.readthedocs.io/en/latest/cmd-venv-destroy.html>`_\ , `inspect <https://dephell.readthedocs.io/en/latest/cmd-inspect-venv.html>`_\ , `run shell <https://dephell.readthedocs.io/en/latest/cmd-venv-shell.html>`_\ , `run commands inside <https://dephell.readthedocs.io/en/latest/cmd-venv-run.html>`_.
* `Install CLI tools <https://dephell.readthedocs.io/en/latest/cmd-jail-install.html>`_ into isolated environments.
* Manage packages: `install <https://dephell.readthedocs.io/en/latest/cmd-package-install.html>`_\ , `list <https://dephell.readthedocs.io/en/latest/cmd-package-list.html>`_\ , `search <https://dephell.readthedocs.io/en/latest/cmd-package-search.html>`_ on PyPI.
* `Build <https://dephell.readthedocs.io/en/latest/cmd-project-build.html>`_ packages (to upload on PyPI), `test <https://dephell.readthedocs.io/en/latest/cmd-project-test.html>`_\ , `bump project version <https://dephell.readthedocs.io/en/latest/cmd-project-bump.html>`_.
* `Discover licenses <https://dephell.readthedocs.io/en/latest/cmd-deps-licenses.html>`_ of all project dependencies, show `outdated <https://dephell.readthedocs.io/en/latest/cmd-deps-outdated.html>`_ packages, `find security issues <https://dephell.readthedocs.io/en/latest/cmd-deps-audit.html>`_.
* Generate `.editorconfig <https://dephell.readthedocs.io/en/latest/cmd-generate-editorconfig.html>`_\ , `LICENSE <https://dephell.readthedocs.io/en/latest/cmd-generate-license.html>`_\ , `AUTHORS <https://dephell.readthedocs.io/en/latest/cmd-generate-authors.html>`_\ , `.travis.yml <https://dephell.readthedocs.io/en/latest/cmd-generate-travis.html>`_.

See `documentation <https://dephell.readthedocs.io/>`_ for more details.

Installation
------------

Simplest way:

.. code-block:: bash

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

See `installation documentation <https://dephell.readthedocs.io/en/latest/installation.html>`_ for better ways.

Supported formats
-----------------


#. Archives:

#. `*.egg-info <https://setuptools.readthedocs.io/en/latest/formats.html>`_ (\ ``egginfo``\ )
#. `*.tar.gz <https://packaging.python.org/glossary/#term-distribution-package>`_ (\ ``sdist``\ )
#. `*.whl <https://pythonwheels.com>`_ (\ ``wheel``\ )

#. `pip <https://pip.pypa.io/en/stable/>`_\ :

#. `requirements.txt <https://pip.pypa.io/en/stable/user_guide/#requirements-files>`_ (\ ``pip``\ )
#. `requirements.lock <https://nvie.com/posts/pin-your-packages/>`_ (\ ``piplock``\ )

#. `pipenv <https://pipenv.readthedocs.io/en/latest/>`_\ :

#. `Pipfile <https://github.com/pypa/pipfile>`_ (\ ``pipfile``\ )
#. `Pipfile.lock <https://stackoverflow.com/a/49867443/8704691>`_ (\ ``pipfilelock``\ )

#. `poetry <https://github.com/sdispater/poetry>`_\ :

#. `pyproject.toml <https://poetry.eustace.io/docs/pyproject/>`_ (\ ``poetry``\ )
#. `poetry.lock <https://poetry.eustace.io/docs/basic-usage/#installing-without-poetrylock>`_ (\ ``poetrylock``\ )

#. Other:

#. `setup.py <https://docs.python.org/3/distutils/setupscript.html>`_ (\ ``setuppy``\ )
#. `pyproject.toml build-system requires <https://www.python.org/dev/peps/pep-0518/#build-system-table>`_ (\ ``pyproject``\ )
#. Installed packages (\ ``installed``\ ).

Usage
-----

First of all, install DepHell and activate autocomplete:

.. code-block:: bash

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

Let's get `sampleproject <https://github.com/pypa/sampleproject>`_ and make it better.

.. code-block:: bash

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

This project uses `setup.py <https://docs.python.org/3/distutils/setupscript.html>`_ for dependenciesand metainfo. However, this format over-complicated for most of projects. Let's convert it into `poetry <https://poetry.eustace.io/docs/pyproject/>`_\ :

.. code-block:: bash

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

It will make next ``pyproject.toml``\ :

.. code-block:: 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"]

Now, let's generate some useful files:

.. code-block:: bash

dephell generate authors

dephell generate license MIT

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

Our users, probably, has no installed poetry, but they, definitely, has pip that can install files from setup.py. Let's make it easier to generate ``setup.py`` from our ``pyproject.toml``. Also, it points for DepHell your default dependencies file. Add next lines in the ``pyproject.toml``\ :

.. code-block:: toml

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

You can see full real world example of config in `DepHell's own pyproject.toml <./pyproject.toml>`_.

Now we can call DepHell commands without explicitly specifying ``from`` and ``to``\ :

.. code-block:: bash

dephell deps convert

It will make setup.py and README.rst from pyproject.toml and README.md.

Now let's test our code into virtual environment:

.. code-block:: bash

$ 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

Also, we can just activate virtual environment for project and run any commands inside:

.. code-block:: bash

dephell venv shell

Ugh, we has tests, but has no ``pytest`` in our dependencies file. Let's add it:

.. code-block:: bash

dephell deps add --envs dev test -- pytest

Afer that our dev-dependencies looks like this:

.. code-block:: toml

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

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

One day we will have really many dependencies. Let's have a look how many of them we have now:

.. code-block:: bash

$ 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]

Hm... It is many or not? Let's look on their size.

.. code-block:: bash

$ dephell inspect venv --filter=lib_size
11.96Mb

Ugh... Ok, it's Python. Are they actual?

.. code-block:: bash

$ 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`` requires old version of ``more-itertools``. That happens.

If our tests and dependencies are OK, it's time to deploy. First of all, increment project version:

.. code-block:: bash

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

And then build packages:

.. code-block:: bash

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

Now, we can upload these packages on `PyPI <https://pypi-hypernode.com/>`_ with `twine <https://github.com/pypa/twine/>`_.

This is some of the most useful commands. See `documentation <https://dephell.readthedocs.io/>`_ for more details.

Compatibility
-------------

DepHell tested on Linux and Mac OS X with Python 3.5, 3.6, 3.7. And one of the coolest things that DepHell ran by DepHell on Travis CI.

How can I help
--------------


#. Star project on Github. Developers believe in the stars.
#. Tell your fellows that `Gram <http://github.com/orsinium>`_ made `cool thing <https://github.com/dephell/dephell>`_ for you.
#. `Open an issue <https://github.com/dephell/dephell/issues/new>`_ if you have thoughts how to make DepHell better.
#. Things that you can contribute in any project in `DepHell ecosystem <https://github.com/dephell>`_\ :

#. Fix grammar and typos.
#. Document new things.
#. Tests, we always need more tests.
#. Make READMEs more nice and friendly.
#. See issues by `help wanted <https://github.com/dephell/dephell/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22>`_ label to find things that you can fix.
#. Anything what you want. If it is a new feature, please, open an issue before writing code.

Thank you :heart:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dephell-0.5.2.tar.gz (81.3 kB view details)

Uploaded Source

Built Distribution

dephell-0.5.2-py3-none-any.whl (134.2 kB view details)

Uploaded Python 3

File details

Details for the file dephell-0.5.2.tar.gz.

File metadata

  • Download URL: dephell-0.5.2.tar.gz
  • Upload date:
  • Size: 81.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.7.0

File hashes

Hashes for dephell-0.5.2.tar.gz
Algorithm Hash digest
SHA256 9b0cec672f43c2ce93e25a80af9d0e0e7609ab80d1b7cf7b383d9772ba736ac2
MD5 9434767048de6573f968ae7748e97534
BLAKE2b-256 5a0162f45752826f9f906d2d4a6b585d28e42ce4d3e0e1f9f4825a896fca776e

See more details on using hashes here.

File details

Details for the file dephell-0.5.2-py3-none-any.whl.

File metadata

  • Download URL: dephell-0.5.2-py3-none-any.whl
  • Upload date:
  • Size: 134.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.7.0

File hashes

Hashes for dephell-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8538b2da4f119653e2cad12c9cc167980ea572cc27d19b551b3c1370a8c3acfe
MD5 2cbc9400db8fa1d581a9308b4f26b400
BLAKE2b-256 f90e199fcf8588b1c5db10ea2bb80337960b74acfc76395891e53ee71b53ee53

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page