Making it installabel package and switching to segmentation mode
This commit is contained in:
178
BUILD.md
Normal file
178
BUILD.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# Building and Publishing Guide
|
||||
|
||||
This guide explains how to build and publish the microscopy-object-detection package.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
```bash
|
||||
pip install build twine
|
||||
```
|
||||
|
||||
## Building the Package
|
||||
|
||||
### 1. Clean Previous Builds
|
||||
|
||||
```bash
|
||||
rm -rf build/ dist/ *.egg-info
|
||||
```
|
||||
|
||||
### 2. Build Distribution Archives
|
||||
|
||||
```bash
|
||||
python -m build
|
||||
```
|
||||
|
||||
This will create both wheel (`.whl`) and source distribution (`.tar.gz`) in the `dist/` directory.
|
||||
|
||||
### 3. Verify the Build
|
||||
|
||||
```bash
|
||||
ls dist/
|
||||
# Should show:
|
||||
# microscopy_object_detection-1.0.0-py3-none-any.whl
|
||||
# microscopy_object_detection-1.0.0.tar.gz
|
||||
```
|
||||
|
||||
## Testing the Package Locally
|
||||
|
||||
### Install in Development Mode
|
||||
|
||||
```bash
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
### Install from Built Package
|
||||
|
||||
```bash
|
||||
pip install dist/microscopy_object_detection-1.0.0-py3-none-any.whl
|
||||
```
|
||||
|
||||
### Test the Installation
|
||||
|
||||
```bash
|
||||
# Test CLI
|
||||
microscopy-detect --version
|
||||
|
||||
# Test GUI launcher
|
||||
microscopy-detect-gui
|
||||
```
|
||||
|
||||
## Publishing to PyPI
|
||||
|
||||
### 1. Configure PyPI Credentials
|
||||
|
||||
Create or update `~/.pypirc`:
|
||||
|
||||
```ini
|
||||
[pypi]
|
||||
username = __token__
|
||||
password = pypi-YOUR-API-TOKEN-HERE
|
||||
```
|
||||
|
||||
### 2. Upload to Test PyPI (Recommended First)
|
||||
|
||||
```bash
|
||||
python -m twine upload --repository testpypi dist/*
|
||||
```
|
||||
|
||||
Then test installation:
|
||||
|
||||
```bash
|
||||
pip install --index-url https://test.pypi.org/simple/ microscopy-object-detection
|
||||
```
|
||||
|
||||
### 3. Upload to PyPI
|
||||
|
||||
```bash
|
||||
python -m twine upload dist/*
|
||||
```
|
||||
|
||||
## Version Management
|
||||
|
||||
Update version in multiple files:
|
||||
- `setup.py`: Update `version` parameter
|
||||
- `pyproject.toml`: Update `version` field
|
||||
- `src/__init__.py`: Update `__version__` variable
|
||||
|
||||
## Git Tags
|
||||
|
||||
After publishing, tag the release:
|
||||
|
||||
```bash
|
||||
git tag -a v1.0.0 -m "Release version 1.0.0"
|
||||
git push origin v1.0.0
|
||||
```
|
||||
|
||||
## Package Structure
|
||||
|
||||
The built package includes:
|
||||
- All Python source files in `src/`
|
||||
- Configuration files in `config/`
|
||||
- Database schema file (`src/database/schema.sql`)
|
||||
- Documentation files (README.md, LICENSE, etc.)
|
||||
- Entry points for CLI and GUI
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Import Errors
|
||||
If you get import errors, ensure:
|
||||
- All `__init__.py` files are present
|
||||
- Package structure follows the setup configuration
|
||||
- Dependencies are listed in `requirements.txt`
|
||||
|
||||
### Missing Files
|
||||
If files are missing in the built package:
|
||||
- Check `MANIFEST.in` includes the required patterns
|
||||
- Check `pyproject.toml` package-data configuration
|
||||
- Rebuild with `python -m build --no-isolation` for debugging
|
||||
|
||||
### Version Conflicts
|
||||
If version conflicts occur:
|
||||
- Ensure version is consistent across all files
|
||||
- Clear build artifacts and rebuild
|
||||
- Check for cached installations: `pip list | grep microscopy`
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
### GitHub Actions Example
|
||||
|
||||
```yaml
|
||||
name: Build and Publish
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install build twine
|
||||
- name: Build package
|
||||
run: python -m build
|
||||
- name: Publish to PyPI
|
||||
env:
|
||||
TWINE_USERNAME: __token__
|
||||
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
||||
run: twine upload dist/*
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Version Bumping**: Use semantic versioning (MAJOR.MINOR.PATCH)
|
||||
2. **Testing**: Always test on Test PyPI before publishing to PyPI
|
||||
3. **Documentation**: Update README.md and CHANGELOG.md for each release
|
||||
4. **Git Tags**: Tag releases in git for easy reference
|
||||
5. **Dependencies**: Keep requirements.txt updated and specify version ranges
|
||||
|
||||
## Resources
|
||||
|
||||
- [Python Packaging Guide](https://packaging.python.org/)
|
||||
- [setuptools Documentation](https://setuptools.pypa.io/)
|
||||
- [PyPI Publishing Guide](https://packaging.python.org/tutorials/packaging-projects/)
|
||||
Reference in New Issue
Block a user