Tanks a lot Wes,

I know what I will do on Monday :-)

Le sam. 24 août 2019 23:22, Wes Turner <[email protected]> a écrit :

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

Reply via email to