22

I am trying to understand how python packaging works using setuptools.

One of the arguments for setup() function is scripts . The documentation doesn't specify what that argument is used for. Any help would be great!! Here is some sample code where scripts is used.

from setuptools import setup, find_packages
setup(
    name="HelloWorld",
    version="0.1",
    packages=find_packages(),
    scripts=['say_hello.py'],

    # Project uses reStructuredText, so ensure that the docutils get
    # installed or upgraded on the target machine
    install_requires=['docutils>=0.3'],

    package_data={
        # If any package contains *.txt or *.rst files, include them:
        '': ['*.txt', '*.rst'],
        # And include any *.msg files found in the 'hello' package, too:
        'hello': ['*.msg'],
    },

    # metadata for upload to PyPI
    author="Me",
    author_email="me@example.com",
    description="This is an Example Package",
    license="PSF",
    keywords="hello world example examples",
    url="http://example.com/HelloWorld/",   # project home page, if any

    # could also include long_description, download_url, classifiers, etc.
)
worker_bee
  • 451
  • 4
  • 11
Will_of_fire
  • 1,089
  • 4
  • 12
  • 24

1 Answers1

21

Its mainly used to define the additional scripts you'll be using in your package. Here's a snippet from the reference link:

#!/usr/bin/env python
import funniest print funniest.joke() 

Then we can declare the script in setup() like this:

setup(
    ...
    scripts=['bin/funniest-joke'],
    ... 
    ) 

When we install the package, setuptools will copy the script to our PATH and make it available for general use. This has advantage of being generalizeable to non-python scripts, as well: funniest-joke could be a shell script, or something completely different.

Reference: http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html#the-scripts-keyword-argument

worker_bee
  • 451
  • 4
  • 11
  • 15
    It's important to stress that the `scripts` keyword DOES NOT WORK in Windows! If there is no specific reason, please use the 2nd option `console_scripts` setuptools entry-point, as described in the reference link, which is officially "blessed": https://packaging.python.org/guides/distributing-packages-using-setuptools/#scripts – ankostis Jun 08 '18 at 13:37
  • 1
    notice for entry_points: `The functions you specify are called with no arguments, and their return value is passed to sys.exit() ...` – droid192 Feb 07 '20 at 13:30