pythonpython-2.7setuptools

Python setuptools using 'scripts' keyword in setup.py


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.
)

Solution

  • Its mainly used to define the additional scripts you'll be using in your package. Here's a snippet from the official documentation on python-packaging:

    #!/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.