 
        
        A site for hosting software and data repositories associated with papers appearing in the journal _Operations Research_
View source on GitHub
Python offers several methods for specifying project dependencies, each suited for different use cases:
The traditional and simplest approach:
requests==2.28.1
numpy>=1.20.0
pandas~=1.5.0
==, >=, ~=, !=)requirements.txt for production, requirements-dev.txt for development dependenciespip install -r requirements.txtFor creating installable packages:
setup(
    name="mypackage",
    install_requires=[
        "requests>=2.20.0",
        "numpy",
    ],
    extras_require={
        "dev": ["pytest", "black"],
    }
)
extras_requireThe modern, standardized approach (PEP 518, 621):
[project]
dependencies = [
    "requests>=2.20.0",
    "numpy>=1.20",
]
[project.optional-dependencies]
dev = ["pytest", "black"]
setup.py for many use casesUsed by Pipenv:
[packages]
requests = "*"
[dev-packages]
pytest = "*"
Poetry’s approach combines both:
pyproject.tomlpoetry.lockFor conda environments:
dependencies:
  - python=3.9
  - numpy
  - pip:
    - requests
==2.0.0 - exact version>=1.5.0 - minimum version~=1.5.0 - compatible release (>=1.5.0, <1.6.0)>=1.0,<2.0 - version rangeCurrent trend: The ecosystem is moving toward pyproject.toml as the standard for all Python projects, with lock files (Poetry, PDM, or pip-tools) for reproducible environments.