IPM native integration (app.ipm)
This folder contains the Python wrapper that calls the native refifc libraries.
Goals
- Centralize the Python wrapper under
app/ipmso application code can importapp.ipm.simple_refrig_api. - Provide a clear location for native binaries (DLLs for Windows, .so for Linux).
Where to place native binaries
- Windows (local/dev): place DLL files in
app/ipm/lib/windows/. - Linux (container/production): place .so files in
app/ipm/lib/linux/.
The wrapper app/ipm/simple_refrig_api.py will look first in app/ipm/lib/<platform> (windows or linux) and fall back to the package directory if nothing is found.
Do NOT commit native binaries
Native binaries should not be committed to the repo (size, licensing, portability). The repo contains a .gitignore rule excluding app/ipm/lib/windows/*.dll and app/ipm/lib/linux/*.so.
CI/CD
- Store binaries in a secure artifact repository (releases, internal storage, S3, etc.).
- During CI, download them and copy into
app/ipm/lib/<platform>before building the image or deploying.
Quick local test
- Copy the binaries into the correct folder (e.g.
app/ipm/lib/windows/refifc.dll). - Test locally:
.venv\Scripts\python -c "import app.ipm.simple_refrig_api as s; r=s.Refifc('R290'); print('hsl_px exists', hasattr(r,'hsl_px'))"
Best practices
- Avoid committing binaries in Git.
- Record the exact origin and version of native binaries in release notes.
- Provide small helper scripts (
scripts/copy-ipm-libs.*) to automate copying binaries into build environments.
For French documentation see: README_fr.md
IPM native integration (app.ipm)
This folder contains the Python wrapper that calls the native refifc libraries.
Goals
- Centralize the Python wrapper under
app/ipmso application code can importapp.ipm.simple_refrig_api. - Provide a clear location for native binaries (DLLs for Windows, .so for Linux).
Where to place native binaries
- Windows (local/dev): place DLL files in
app/ipm/lib/windows/. - Linux (container/production): place .so files in
app/ipm/lib/linux/.
The wrapper app/ipm/simple_refrig_api.py will look first in app/ipm/lib/<platform> (windows or linux) and fall back to the package directory if nothing is found.
Do NOT commit native binaries
Native binaries should not be committed to the repo (size, licensing, portability). The repo contains a .gitignore rule excluding app/ipm/lib/windows/*.dll and app/ipm/lib/linux/*.so.
Deployment / Docker
- The Dockerfile should copy the appropriate native binaries into
app/ipm/lib/<platform>during the build. Example (Linux image):
FROM python:3.12-slim
WORKDIR /app
COPY . /app
# Copy native linux libs into the package
COPY path/to/linlibs/*.so /app/app/ipm/lib/linux/
RUN pip install --no-cache-dir -r requirements.txt
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
CI/CD
- Store binaries in a secure artifact repository (releases, internal storage, S3, etc.).
- During CI, download them and copy into
app/ipm/lib/<platform>before building the image or deploying.
Quick local test
- Copy the binaries into the correct folder (e.g.
app/ipm/lib/windows/refifc.dll). - Test locally:
.venv\Scripts\python -c "import app.ipm.simple_refrig_api as s; r=s.Refifc('R290'); print('hsl_px exists', hasattr(r,'hsl_px'))"
Best practices
- Avoid committing binaries in Git.
- Record the exact origin and version of native binaries in release notes.
- Provide small helper scripts (
scripts/copy-ipm-libs.*) to automate copying binaries into build environments.