Metadata-Version: 2.1
Name: helloworld-mkmenta
Version: 0.0.4
Summary: Say hello!
Home-page: https://github.com/mkmenta/python-package-example
Author: Mikel Menta Garde
Author-email: thisisnotmyemail@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.9
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
Requires-Dist: termcolor (>=1.1.0)
Provides-Extra: dev
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: pydocstyle ; extra == 'dev'
Requires-Dist: pycodestyle ; extra == 'dev'

# Python Package Example
This repository contains a basic python package example with the aim of showing how a good python package should look like.

Install:
```
pip install helloworld-mkmenta
```
Install locally:
```
git clone https://github.com/mkmenta/python-package-example.git
cd python-package-example
pip install -e .
```

### Usage
You will find an usage example [here](examples/say_hello_example.py).

## Documentation
This project has a documentation in *readthedocs.io* generated using `sphinx`: [documentation](https://python-package-example.readthedocs.io/en/latest/index.html).

Find the tutorial on how it was created [here](https://python-package-example.readthedocs.io/en/latest/tutorials/documentation.html).

## Developing
To install the package along with the tools you need to develop it run the following (local installation with the `"dev"` extras:
```
git clone https://github.com/mkmenta/python-package-example.git
cd python-package-example
pip install -e ."[dev]"
```
If you are developing, you should run `pip install -e .` every time you change `setup.py` or the dependencies etc. to make sure that everything works.

### A note about requirements
The requirements needed to **run** the package should go in the `install_requires` argument of `setup()` in the `setup.py`.

The requirements needed to **develop** the package should go in the `extras_require` argument dict (under the `"dev"` key) of `setup()` in the `setup.py`.

This is preferred to a `requirements.txt` file, because this is code and it can be understood directly during the installation of the package itself.

The `requirements.txt` should be used to recreate enviroments with specific versions (e.g.`requests==2.22.0`), not to share software.

### Building and distribution
Build without installi i.e. build wheel:
```
python3 setup.py bdist_wheel
```

Source distribution:
```
python3 setup.py sdist
```
For the source distribution, remember to:
- Check out the warnings of `python3 setup.py sdist`.
- Check that every file from the repo is packed in the tar file (`tar tzf dist/helloworld-X.X.X.tar.gz`) as written in the `MANIFEST.in`. A useful tool is `check-manifest`.

### Uploading to PyPI
```
python3 setup.py bdist_wheel sdist
twine upload dist/*
```

### Code format checks and tests (GitHub Actions for continuous integration)
In order to check the code format and test it, this project runs a GitHub action defined in [`.github/workflows/main-action.yml`](.github/workflows/main-action.yml).

You can check the execution of this action [here](https://github.com/mkmenta/python-package-example/actions/workflows/main-action.yml).

This allows blocking any merge of a pull request if the code is not correcly formatted or tests are not passing. In order to do that you can go to `Settings -> Branches -> Add rule`

### Other useful stuff
- This repo is prepared for PyCharm and it has some run configurations (in `.idea/runConfigurations`).

## References
- Mark Smith - Publish a (Perfect) Python Package on PyPI ([video](https://www.youtube.com/watch?v=GIF3LaRqgXo))
- `.gitignore` file from [gitignore.io](gitignore.io)
- License from [choosealicense.com](choosealicense.com)
- PyPI classifiers from https://pypi.org/classifiers/


