# Uploading wheels to PyPI with
## Using twine and setup.py
Requirements:
```bash
python3 -m pip install --upgrade twine build
```
Run build to generate the distribution wheels:
```bash
python3 -m build --wheel
```
Run Twine to upload all of the archives under `dist`:
Test upload
```bash
python3 -m twine upload --repository testpypi dist/*
```
Real upload:
```bash
python3 -m twine upload -u fnl dist/*
```
## Using Poetry
Requirements: see [[Poetry setup]]
**Limitation**: only pure Python wheels are supported (cython!)
Run build to generate the distribution wheels:
```shell
poetry build # only pure python wheels supported
```
And then upload to PyPI:
```shell
poetry publish --username fnl --dry-run
```