# Dependency Management

I generally encounter two different package/dependency management scenarios:

* **Packages**: Full packages that are intended for distribution on [PyPI], and possibly
  with [Conda].
* **Projects**: Working projects (like this class project) that will generally be
  distributed using version control.
  
## Packages

If a package is going to be distributed on [PyPI], then you should try to [Poetry] as
configured through a `pyproject.toml` file.  This can be a bit of a pain as [Poetry] is
very picky when it comes to dependency specifications, but it is probably best to work
through these and get everything working.

There are a couple of caveats though:

* Poetry does [not support shell script
  files](https://github.com/python-poetry/poetry/issues/2310) as one could specify with
  the [`scripts=`
  argument](https://setuptools.pypa.io/en/latest/deprecated/distutils/setupscript.html)
  to `setup()`.  The limitation is that one must use python entry points.  Thus:
  
  ```toml
  [tools.poetry.scripts]
  mmf_setup = 'mmf_setup:run'
  ```
  
  This would install a command `mmf_setup` that calls `mmf_setup.run()`.

`entry-points` If you intend to install shell-scripts as entry points, 

  

