Feature request: Build a published crate as a RustExtension (for use with `ctypes` or `cffi` directly)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Ambito
- build-system
Direzione di ricerca
Inizia leggendo l’hack citato in _backend/rustfst_backend/build_meta.py e l’entry point setuptools_rust.setuptools_ext.rust_extensions. Determina come una RustExtension potrebbe compilare una dipendenza pubblicata ed esporre la propria libreria condivisa sulle piattaforme supportate, quindi definisci il completamento attorno a un’opzione source_package che supporti il caso d’uso di ctypes o cffi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hopefully I haven't missed something and this isn't already possible (perhaps with some invocation of maturin that I didn't see in the documentation?)...
It would be nice to be able to create a Python package which contains no actual Rust code of its own but simply builds a publicly available crate (which exports a C interface) and calls into it with ctypes. This may be a bit of a niche use case? I am using it with https://crates.io/crates/rustfst-ffi/1.2.6 because the upstream mantainers, while they publish a Python package, don't publish it as a source distribution and so it can only be installed from PyPI on platforms for which a binary exists.
Now obviously you shouldn't do that. So, I've found a somewhat ugly hack, which is to simply create an empty library with the desired crate as a dependency, then copy the shared library for the dependency instead of the built library (which, obviously, exports none of its dependency's symbols). This is done by monkey-patching setuptools_rust.setuptools_ext.rust_extensions in an in-tree build backend: https://github.com/dhdaines/rustfst/blob/standalone_python/_backend/rustfst_backend/build_meta.py
Not being an expert in Rust I don't know if this works on all platforms or if there's a better way to do it. But I think it would be relatively easy to add this as an option to RustExtension, perhaps, source_package, which would do what the hack above does.
- Lingua principale
- Python
- Stelle
- 680
- Fork
- 110
- Merge medio
- 3g 18h
- PR unite (30g)
- 1
Preparare l'ambiente
Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di PyO3/setuptools-rust
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
PyO3/setuptools-rust#619 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
PyO3/setuptools-rust#610 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 30/100
PyO3/setuptools-rust#507 · 3 commenti ·
-
How to use with dockerAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
PyO3/setuptools-rust#449 · 10 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
PyO3/setuptools-rust#344 · 7 commenti ·
Tutte le issue di PyO3/setuptools-rust
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
PedestrianDynamics/pyFDS-Evac#343 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
theskumar/python-dotenv#708 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 2 giorni
-
Docs Timedelta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
pandas-dev/pandas#69919 ·
I maintainer di solito rispondono entro 1 giorno
-
API documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
zephyrproject-rtos/west#1009 · 2 commenti ·
I maintainer di solito rispondono entro 3 giorni