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/UA3TBBV7XIDCMTPPCG57D74GI5FFOMOP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to