setup.py and adding file to /bin/

Consider using console_scripts:

from setuptools import setup
setup(name='some-name',
      ...
      entry_points = {
              'console_scripts': [
                  'command-name = package.module:main_func_name',                  
              ],              
          },
)

Where main_func_name is a main function in your main module. command-name is a name under which it will be saved in /usr/local/bin/ (usually)


The Python documentation explains it under the installing scripts section.

Scripts are files containing Python source code, intended to be started from the command line.

setup(...,
      scripts=['scripts/xmlproc_parse', 'scripts/xmlproc_val']
)

As mentioned here, beside scripts, there is an entry_points mechanism, which is more cross-platform.

With entry_points you connect a command line tool name with a function of your choice, whereas scripts could point to any file (e.g. a shell script).


There are two ways in order to get a working command line tool from setuptools and PyPI infrastructure:

  1. The "scripts" Keyword Argument
    This allows the command-line execution of everything you want, it can be a Python script, a shell script or something completely different.
  2. The "console_scripts" Entry Point
    This allows Python functions (not scripts!) to be directly registered as command-line accessible tools.