์ด ๋ ํฌ๋ Rust๋ก ์์ฑํ Python ํ์ฅ ๋ชจ๋(netcheck)์ maturin์ผ๋ก ๋น๋ํ๊ณ , ๋ณ๋์ Python ์ฑ(py-project)์์ ์ฌ์ฉํ๋ ์์ ํ๋ก์ ํธ์
๋๋ค.
python-rust-binding/
โโ netcheck/ # Rust โ Python ๋ฐ์ธ๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (PyO3 + maturin)
โโ py-project/ # ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ Python ์ฑ (uv๋ก ์์กด์ฑ ๊ด๋ฆฌ)
โโ python-rust-binding.code-workspace
- Rust (rustup)
- Python 3.12+
- maturin
- uv (์ ํ,
py-project์์ ์์กด์ฑ ๊ด๋ฆฌ์ฉ)
py-project๋ ๋ก์ปฌ netcheck๋ฅผ ์์ค ์์กด์ฑ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ๋ฃจํธ์์:
cd py-project
uv syncpy-project/pyproject.toml์[tool.uv.sources]์ค์ ์ผ๋ก../netcheck๊ฐ editable๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.- uv๋ฅผ ์ฐ์ง ์๋๋ค๋ฉด pip๋ก๋ ๊ฐ๋ฅํฉ๋๋ค:
pip install -e ../netcheckcd py-project
uv run python main.py๋๋ ๊ฐ์ํ๊ฒฝ์์:
python -m venv .venv
source .venv/bin/activate
pip install -e ../netcheck
python main.pynetcheck์์ Rust ์ฝ๋๋ฅผ ์์ py-project์์ ์คํฌ๋ฆฝํธ ์คํ โ ํ์ฅ ๋ชจ๋์ด ์๋ ๋ฆฌ๋น๋๋์ด ๋ฐ์(Editable)- ํ์ ์
netcheck์์ wheel ๋น๋
cd netcheck
maturin build --release # target/wheels/*.whl ์์ฑ- macOS์์
arm64ํ๊ฒ๋ก ๋น๋๋ wheel์ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด Python/๊ฐ์ํ๊ฒฝ๋ ๋์ผ ์ํคํ ์ฒ์ธ์ง ํ์ธํ์ธ์. uv sync์ค๋ฅ ์py-project/pyproject.toml์[tool.uv.sources]๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ์ธ์.- ์ฌ๋ณผ ๋ก๋ ์ค๋ฅ ๋ฐ์ ์, ์ด์ ์ ์ค์น๋ ์ค๋๋ wheel์ด ๋จ์์์ ์ ์์ต๋๋ค.
pip uninstall netcheckํ ์ฌ์ค์นํ์ธ์.