```python
!cat ../../bin/example
```

    #!/home/user/-wrk/-ve37/s_example/bin/python3
    # EASY-INSTALL-ENTRY-SCRIPT: 'example','console_scripts','example'
    __requires__ = 'example'
    import re
    import sys
    from pkg_resources import load_entry_point

    if __name__ == '__main__':
        sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
        sys.exit(
            load_entry_point('example', 'console_scripts', 'example')()
        )

On Sat, Aug 24, 2019 at 5:16 PM Wes Turner <[email protected]> wrote:
>
> https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html#the-console-scripts-entry-point
>
> On Sat, Aug 24, 2019 at 5:11 PM Wes Turner <[email protected]> wrote:
> >
> > # Python packaging, setup.py, console_scripts entrypoints, and __main__.py
> >
> >
> > ```python
> > !ls **
> > ```
> >
> >     examplenb.ipynb  requirements.txt  setup.py
> >
> >     example:
> >     __init__.py  __main__.py  thecode.py
> >
> >
> >
> > ```python
> > !cat setup.py
> > ```
> >
> >
> >     from setuptools import setup
> >
> >     setup(name='example',
> >           version='0.1',
> >           description='Example',
> >           url='http://github.com/.../...',
> >           author='Example',
> >           author_email='[email protected]',
> >           license='...',
> >           packages=['example'],
> >           zip_safe=False,
> >           entry_points={
> >               'console_scripts': [
> >                   'example = example.thecode:main'
> >               ]}
> >           )
> >
> >
> >
> > ```python
> > !cat example/thecode.py
> > ```
> >
> >
> >     import sys
> >
> >     def main(argv=None):
> >         if argv is None:
> >             argv = sys.argv
> >         print("argparse here", argv)
> >
> >
> >
> > ```python
> > !cat example/__main__.py
> > ```
> >
> >
> >     import sys
> >
> >     from .thecode import main
> >
> >     def othermain():
> >         print("othermain")
> >         return main(sys.argv)
> >
> >     if __name__ == "__main__":
> >         othermain()
> >
> >
> >
> > ```python
> > !cat ./requirements.txt
> > ```
> >
> >     -e .
> >
> >
> >
> > ```python
> > !pip install -r ./requirements.txt
> > # (this is equivalent to `pip install -e .`)
> > ```
> >
> >     Obtaining file:///home/user/-wrk/-ve37/s_example/src/s_example
> > (from -r ./requirements.txt (line 1))
> >     Installing collected packages: example
> >       Found existing installation: example 0.1
> >         Uninstalling example-0.1:
> >           Successfully uninstalled example-0.1
> >       Running setup.py develop for example
> >     Successfully installed example
> >
> >
> >
> > ```python
> > !ls **
> > ```
> >
> >     examplenb.ipynb  requirements.txt  setup.py
> >
> >     example:
> >     __init__.py  __main__.py  thecode.py
> >
> >     example.egg-info:
> >     dependency_links.txt  not-zip-safe  SOURCES.txt
> >     entry_points.txt      PKG-INFO     top_level.txt
> >
> >
> >
> > ```python
> > # This is generated when you `pip install -e`
> > !cat ./example.egg-info/entry_points.txt
> > ```
> >
> >     [console_scripts]
> >     example = example.thecode:main
> >
> > ```python
> > # this runs the 'example' console_scripts entry_point
> > !example
> > ```
> >
> >     argparse here ['/home/user/-wrk/-ve37/s_example/bin/example']
> >
> >
> >
> > ```python
> > # this runs example/__main__
> > !python -m example
> > ```
> >
> >     othermain
> >     argparse here
> > ['/home/user/-wrk/-ve37/s_example/src/s_example/example/__main__.py']
> >
> >
> > ...
> >
> > When you want the project to be reproducible:
> >
> > - you have tests (eg in tests/)
> > - you have a requirements.txt that lists exact versions of all
> >     dependencies
> > - you build the entire environment (including any requisite OS packages)
> >   from zero (with a virtualenv and/or docker), then run the tests
> >
> > There are a number of cookiecutters (project templates)
> > which have the whole project setup:
> >
> > - 
> > https://cookiecutter.readthedocs.io/en/latest/readme.html#available-cookiecutters
> > - cookiecutter-pypackage includes pytest setup
> > - https://cookiecutter.readthedocs.io/en/latest/readme.html#data-science
> > - 
> > https://cookiecutter.readthedocs.io/en/latest/readme.html#reproducible-science
> >
> > I prepared this as a Jupyter notebook, then did 'Save as' > 'Markdown'.
> > Because it has a requirements.txt, if I put this code in a git repo
> > and launch it in
> > mybinder.org (repo2docker), it will build a docker container (also
> > containing jupyter)
> > and launch a free cloud instance; so that others can review the code
> > and notebooks
> > in a read/write environment (where changes are not persisted because
> > the instance is later just deleted)
> >
> > - REES: Reproducible Environment Specification
> >   https://repo2docker.readthedocs.io/en/latest/specification.html
> >
> >   - environment.yml - Install a Python environment
> >   - Pipfile and/or Pipfile.lock - Install a Python environment
> >   - requirements.txt - Install a Python environment
> >   - setup.py - Install Python packages
> >   - Project.toml - Install a Julia environment
> >   - REQUIRE - Install a Julia environment (legacy)
> >   - install.R - Install an R/RStudio environment
> >   - apt.txt - Install packages with apt-get
> >   - DESCRIPTION - Install an R package
> >   - manifest.xml - Install Stencila
> >   - postBuild - Run code after installing the environment
> >   - start - Run code before the user sessions starts
> >   - runtime.txt - Specifying runtimes
> >   - default.nix - the nix package manager
> >   - Dockerfile - Advanced environments
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/E7R2IW3R43NT76LYXTWYPXJECX25REOT/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to