Metadata-Version: 2.1
Name: setuptools-cmd-deps
Version: 1.0.1
Summary: setuptools plugin to configure the dependency among commands
Home-page: https://github.com/jameslan/setuptools-cmd-deps
Author: James Lan
Author-email: jameslan@gmail.com
License: Apache License 2.0
Description: # setuptools-cmd-deps
        
        ![Continuous Integration](https://github.com/jameslan/setuptools-cmd-deps/workflows/Continuous%20Integration/badge.svg)
        ![pypi](https://img.shields.io/pypi/v/setuptools-cmd-deps)
        
        Configure `setuptools` command dependencies easily.
        
        ## Why I need this plugin
        Once a custom `setuptools` command is defined and needs to be run before some build-in command,
        traditionally, there's no simple way and the solution is to override the build-in command,
        to call the new custom command before the command implemented in the super class.
        
        In this way, having an additional class and digging into `setuptools`,
        are just to configure the command order or dependency.
        
        This could be simplified by using `setuptools-cmd-deps`:
        enable the plugin and add custom configuration.
        
        ## Command dependency in the project
        
        If your command is just for the project and it won't be reused,
        you could use new setup keyword `cmd_deps` to define the dependencies.
        
        ### Enable setuptools-cmd-deps
        
        - If your `setup.py` will run only after all depending packages are installed,
        add `setuptools-cmd-deps` in your dependency list,
        such as `requirements.txt`, or `Pipfile`.
        
        - If your `setup.py` supports running out of venv,
        you may not want these packages to be installed in the system.
        Then add `setuptools-cmd-deps` in the `setup_requires` option of your `setuptools`.
        
        ### Define dependency
        
        ```python
        setuptools.setup(
            cmdclass={'generate_py': GenereatePy},
            cmd_deps={'build_py': ['generate_py']},
        )
        ```
        
        ## Command dependency to be shared
        
        If you are developing a `setuptools` plugin,
        and want the command definition to be used by other project and run before some command,
        specify the dependency in the `setuptools.cmd_deps` section in your `entry_points`.
        
        ### Enable setuptools-cmd-deps for the target
        
        Add `setuptools-cmd-deps` in the `install_requires` option of your `setuptools`,
        so that any project uses your package, will automatically uses `setuptools-cmd-deps`.
        
        ### Define dependency
        
        Generally speaking, you already have `distutils.commands` in your `entry_points`.
        
        For example, you defined `gernate_py` command in the `entry_points` as follows,
        
        ```
        distutils.commands =
            generate_py = command:GeneratePy
        ```
        
        and want it always run before `build_py`.
        Simply add `setuptools.cmd_deps` in the `entry_points` as follows,
        
        ```
        setuptools.cmd_deps =
            build_py_dep = build_py:generate_py
        ```
        
        Note that the name `build_py_dep` is not used here.
        It is just for the TOML syntax.
        For the same reason, if there are multiple dependencies for one command,
        it should use dot `.` as delimiter,
        
        ```
        setuptools.cmd_deps =
            command_dep = command:cmd1.cmd2
        ```
        
        Both `cmd1` and `cmd2` will be run before `command`.
        
        Or you can have multiple rules,
        
        ```
        setuptools.cmd_deps =
            command_dep1 = command:cmd1
            command_dep2 = command:cmd2
        ```
        
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Requires-Python: >=3.5
Description-Content-Type: text/markdown
