Package: dephell
DepHell-- project management for Python.Why it is better than all other tools:Format agnostic. You can use DepHell with your favorite format: setup.py, requirements.txt, Pipfile, poetry. DepHell supports them all and much more.Use your favorite tool on any project. Want to install a poetry based project, but don't like poetry? Just tell DepHell to convert the project's meta information into a setup.py and install it with pip. Or directly work with the project from DepHell, because DepHell can do everything that you usually want to do with packages.DepHell doesn't try to replace your favorite tools. If you use poetry, you have to use poetry's file formats and commands. However, DepHell can be combined with any other tool or can even combine all these tools together by converting formats. You can use DepHell, poetry, and pip all at the same time.Easily extendable. DepHell has strong modularity and can be easily extended with new formats and commands.Developer friendly. We aren't going to place all of our modules into_internal. Also, DepHell has alarge ecosystemwith separated libraries so you can use only the parts of DepHell that you need.All-in-one-solution. DepHell can manage dependencies, virtual environments, tests, CLI tools, packages, generate configs, show licenses for dependencies, assist with security audits, get download statistics from PyPI, search packages and much more.Smart dependency resolution. Sometimes pip and pipenv fail to lock your dependencies. Try to executepipenv install oslo.utils==1.4.0. Pipenv can't handle it, but DepHell can:dephell deps add --from=Pipfile oslo.utils==1.4.0to add new dependency anddephell deps convert --from=Pipfile --to=Pipfile.lockto lock it.Asyncio based. DepHell doesn't support Python 2.7, and that allows us to use modern features to make network and filesystem requests as fast as possible.Multiple environments. You can have as many environments for project as you want. Separate sphinx dependencies from your main and dev environment. Other tools like pipenv and poetry don't support this.Features:Manage dependencies:convert between formats,instаll, lock,add new, resolve conflicts.Manage virtual environments:create,remove,inspect,run shell,run commands inside.Install CLI toolsinto isolated environments.Manage packages:install,list,searchon PyPI.Buildpackages (to upload on PyPI),test,bump project version.Discover licensesof all project dependencies, showoutdatedpackages,find security issues.Generate.editorconfig,LICENSE,AUTHORS,.travis.yml.Seedocumentationfor more details.Follow@PythonDepHellon Twitter to get updates about new features and releases.Installationcurl-Ldephell.org/install|python3Seeinstallation documentationfor alternatives.Supported formatsArchives:*.egg-info(egginfo)*.tar.gz(sdist)*.whl(wheel)pip:requirements.txt(pip)requirements.lock(piplock)pipenv:Pipfile(pipfile)Pipfile.lock(pipfilelock)pоetry:pyproject.toml(poetry)poetry.lock(poetrylock)Environment:Imports in the package (imports).Installed packages (installed).Other:setup.py(setuppy)flit(flit)conda'senvironment.yml(conda)pyproject.toml build-system requires(pyproject)UsageFirst of all, install DepHell and activate autocomplete:python3-mpipinstall--userdephell[full]dephellselfautocompleteLet's getsampleprojectand make it better.gitclonehttps://github.com/pypa/sampleproject.gitcdsampleprojectThis project usessetup.pyfor dependencies and metainfo. However, this format is over-complicated for most projects. Let's convert it intopoetry:dephelldepsconvert--from=setup.py--to=pyproject.tomlIt will make nextpyproject.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:dephellgenerateauthors

dephellgeneratelicenseMIT# https://editorconfig.org/dephellgenerateeditorconfigOur users probably have not installed poetry, but they are likely to have pip and can install files from setup.py. Let's make it easier to generatesetup.pyfrom ourpyproject.toml. Also, it points to DepHell as your default dependencies file. Add the following lines in thepyproject.toml:[tool.dephell.main]from={format="poetry",path="pyproject.toml"}to={format="setuppy",path="setup.py"}You can see a full, real-world example of a config inDepHell's own pyproject.toml.Now we can call DepHell commands without explicitly specifyingfromandto:dephelldepsconvertIt will make setup.py and README.rst from pyproject.toml and README.md.Now let's test our code in a virtual environment:$dephellvenvrunpytest
WARNINGvenvdoesnotexist,creating...(project=/home/gram/Documents/sampleproject,env=main,path=/home/gram/.local/share/dephell/venvs/sampleproject-Whg0/main)INFOvenvcreated(path=/home/gram/.local/share/dephell/venvs/sampleproject-Whg0/main)WARNINGexecutabledoesnotfoundinvenv,tryingtoinstall...(executable=pytest)INFObuilddependenciesgraph...
INFOinstallation...# ... pip output# ... pytest outputWe can now activate the virtual environment for our project and run any commands inside:dephellvenvshellUgh, we have tests, but don't havepytestin our dependencies file. Let's add it:dephelldepsadd--envsdevtest--pytestAfer that our dev-dependencies looks like this:[tool.poetry.dev-dependencies]check-manifest="*"pytest="*"[tool.poetry.extras]test=["coverage","pytest"]Eventually we will have many more dependencies. Let's look at how many of them we have now:$dephelldepstree
-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...Is it as many as it seems? Let's look at their size.$dephellinspectvenv--filter=lib_size11.96MbUgh...Ok, it's Python. Are they actual?$dephelldepsoutdated[{"description":"More routines for operating on iterables, beyond itertools","installed":["5.0.0"],"latest":"7.0.0","name":"more-itertools","updated":"2019-03-28"},]Pytestrequires old version ofmore-itertools. That happens.If our tests and dependencies are OK, it's time to deploy. First of all, increment the project version:$dephellprojectbumpminor
INFOgeneratednewversion(old=1.2.0,new=1.3.0)And then build packages:$dephellprojectbuild
INFOdumping...(format=setuppy)INFOdumping...(format=egginfo)INFOdumping...(format=sdist)INFOdumping...(format=wheel)INFObuildedNow, we can upload these packages toPyPI:dephellselfauthupload.pypi.orgmy-usernamemy-password
dephellprojectuploadThese are some of the most useful commands. Seedocumentationfor more details.CompatibilityDepHell is tested on Linux and Mac OS X with Python 3.5, 3.6, 3.7. And one of the coolest things is that DepHell is run by DepHell on Travis CI.DepHell works on Windows but has no CI to keep in working yet.How can I helpStar project on Github. Developers believe in the stars.Tell your fellows thatGramhas a madecool thingfor you.Open an issueif you have thoughts on how to make DepHell better.Things that you can contribute in any project inDepHell ecosystem:Fix grammar and typos.Document new things.Tests, we always need more tests.Make READMEs more nice and friendly.View issues with thehelp wantedlabel to find things that you can fix.Anything what you want. If it is a new feature, please, open an issue before writing the code.Thank you :heart: