magmax/python-inquirer

Source tarball is missing requirements.txt

takeda opened this issue · 0 comments

Currently it is impossible to install the package from sources, because important files are missing.

setup.py is expecting several files such as requirements.txt and README.rst.
Only README.rst is included because setup.py places an exception on it.

Here's a tarball:

tar tf inquirer-2.7.0.tar.gz
inquirer-2.7.0/
inquirer-2.7.0/PKG-INFO
inquirer-2.7.0/README.rst
inquirer-2.7.0/inquirer/
inquirer-2.7.0/inquirer/__init__.py
inquirer-2.7.0/inquirer/errors.py
inquirer-2.7.0/inquirer/events.py
inquirer-2.7.0/inquirer/prompt.py
inquirer-2.7.0/inquirer/questions.py
inquirer-2.7.0/inquirer/render/
inquirer-2.7.0/inquirer/render/__init__.py
inquirer-2.7.0/inquirer/render/console/
inquirer-2.7.0/inquirer/render/console/__init__.py
inquirer-2.7.0/inquirer/render/console/_checkbox.py
inquirer-2.7.0/inquirer/render/console/_confirm.py
inquirer-2.7.0/inquirer/render/console/_editor.py
inquirer-2.7.0/inquirer/render/console/_list.py
inquirer-2.7.0/inquirer/render/console/_password.py
inquirer-2.7.0/inquirer/render/console/_path.py
inquirer-2.7.0/inquirer/render/console/_text.py
inquirer-2.7.0/inquirer/render/console/base.py
inquirer-2.7.0/inquirer/shortcuts.py
inquirer-2.7.0/inquirer/themes.py
inquirer-2.7.0/inquirer.egg-info/
inquirer-2.7.0/inquirer.egg-info/PKG-INFO
inquirer-2.7.0/inquirer.egg-info/SOURCES.txt
inquirer-2.7.0/inquirer.egg-info/dependency_links.txt
inquirer-2.7.0/inquirer.egg-info/not-zip-safe
inquirer-2.7.0/inquirer.egg-info/requires.txt
inquirer-2.7.0/inquirer.egg-info/top_level.txt
inquirer-2.7.0/setup.cfg
inquirer-2.7.0/setup.py
inquirer-2.7.0/tests/
inquirer-2.7.0/tests/acceptance/
inquirer-2.7.0/tests/acceptance/__init__.py
inquirer-2.7.0/tests/acceptance/test_checkbox.py
inquirer-2.7.0/tests/acceptance/test_list.py
inquirer-2.7.0/tests/acceptance/test_password.py
inquirer-2.7.0/tests/acceptance/test_pre_answers.py
inquirer-2.7.0/tests/acceptance/test_shortcuts.py
inquirer-2.7.0/tests/acceptance/test_text.py
inquirer-2.7.0/tests/integration/
inquirer-2.7.0/tests/integration/__init__.py
inquirer-2.7.0/tests/integration/console_render/
inquirer-2.7.0/tests/integration/console_render/__init__.py
inquirer-2.7.0/tests/integration/console_render/helper.py
inquirer-2.7.0/tests/integration/console_render/test_basic.py
inquirer-2.7.0/tests/integration/console_render/test_checkbox.py
inquirer-2.7.0/tests/integration/console_render/test_confirm.py
inquirer-2.7.0/tests/integration/console_render/test_editor.py
inquirer-2.7.0/tests/integration/console_render/test_list.py
inquirer-2.7.0/tests/integration/console_render/test_password.py
inquirer-2.7.0/tests/integration/console_render/test_text.py
inquirer-2.7.0/tests/unit/
inquirer-2.7.0/tests/unit/__init__.py
inquirer-2.7.0/tests/unit/test_prompt.py
inquirer-2.7.0/tests/unit/test_question.py
inquirer-2.7.0/tests/unit/test_theme.py

Any extra files will need to be included in MANIFEST.in file. Here is an explanation how to use it: https://packaging.python.org/guides/using-manifest-in/
I mentioned requirements.txt because that one is absolutely essential, but you probably would want to include everything that's checked in into git.

Other alternative is to use setuptools_scm which main benefit is that it can extract package version from tags in git, but it also ensures that the MANIFEST.in includes all files that are checked in to the repo.

Side note, since this is a package, I would recommend dropping requirements.txt which is meant to be used as a lock file for final applications to pin everything to specific version, and instead define your requirements directly in setup.py under install_requires. You should also made the versions more flexible, so they won't conflict with other packages, for example:

  setup_requires = [
    setuptools_scm
  ],
  install_requires = [
    blessed ~= 1.17.6
    readchar ~= 2.0.1
    python-editor ~= 1.0.4
  ],

The ~= like in (blessed ~= 1.17.6) evaluates to blessed >= 1.17.6,<1.18.0

I would highly encourage to also not use setup.py and instead using declarative configuration from setup.cfg like here: https://setuptools.readthedocs.io/en/latest/userguide/declarative_config.html it is much easier to follow and can be easily parsed by an application.

Alternatively you can use https://python-poetry.org/ for packaging. It makes the python packaging much more enjoyable experience, the only thing I'm missing from it is the ability to use setuptools_scm but maybe it will be added in the future.