Can you check pipenv.
pipenv uses Pipfile and Pipfile.lock for dependencies instead of requirements.txt.
It has a clear separation between the dependencies you install and the dependencies of the dependencies.
check this sample below it is much clearer:
╰─ pipenv graph ─╯
boto3==1.20.38
- botocore [required: >=1.23.38,<1.24.0, installed: 1.23.38]
- jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
- python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.2]
- six [required: >=1.5, installed: 1.16.0]
- urllib3 [required: >=1.25.4,<1.27, installed: 1.26.8]
- jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
- s3transfer [required: >=0.5.0,<0.6.0, installed: 0.5.0]
- botocore [required: >=1.12.36,<2.0a.0, installed: 1.23.38]
- jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
- python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.2]
- six [required: >=1.5, installed: 1.16.0]
- urllib3 [required: >=1.25.4,<1.27, installed: 1.26.8]
colorama==0.4.4
pylint==2.12.2
- astroid [required: >=2.9.0,<2.10, installed: 2.9.3]
- lazy-object-proxy [required: >=1.4.0, installed: 1.7.1]
- setuptools [required: >=20.0, installed: 58.1.0]
- typing-extensions [required: >=3.10, installed: 4.0.1]
- wrapt [required: >=1.11,<1.14, installed: 1.13.3]
- isort [required: >=4.2.5,<6, installed: 5.10.1]
- mccabe [required: >=0.6,<0.7, installed: 0.6.1]
- platformdirs [required: >=2.2.0, installed: 2.4.1]
- toml [required: >=0.9.2, installed: 0.10.2]
- typing-extensions [required: >=3.10.0, installed: 4.0.1]
pytest-cov==3.0.0
- coverage [required: >=5.2.1, installed: 6.0.2]
- pytest [required: >=4.6, installed: 6.2.5]
- attrs [required: >=19.2.0, installed: 21.2.0]
- iniconfig [required: Any, installed: 1.1.1]
- packaging [required: Any, installed: 21.0]
- pyparsing [required: >=2.0.2, installed: 2.4.7]
- pluggy [required: >=0.12,<2.0, installed: 1.0.0]
- py [required: >=1.8.2, installed: 1.10.0]
- toml [required: Any, installed: 0.10.2]
PyYAML==6.0
requests==2.27.1
- certifi [required: >=2017.4.17, installed: 2021.10.8]
- charset-normalizer [required: ~=2.0.0, installed: 2.0.10]
- idna [required: >=2.5,<4, installed: 3.3]
- urllib3 [required: >=1.21.1,<1.27, installed: 1.26.8]
tomli==1.2.1
It has also support for dev and prod package definitions like this:
╰─ cat Pipfile ─╯
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
colorama = "*"
boto3 = "*"
pyyaml = "*"
requests = "*"
pylint = "*"
[dev-packages]
pytest = "*"
pytest-cov = "*"
[requires]
python_version = "3.9"
For more details please check also this link:
https://realpython.com/pipenv-guide/
Also check this for multiple environments in pipenv:
Pipenv: Multiple Environments