mesonbuild / mesonbuild/meson-python

Editable install of a PEP 420 namespace package shadows other packages in the same namespace

Aperta
#775 1 commento 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
Python
Stelle
180
Fork
93
Merge medio
2g 7h
PR unite (30g)
18

Descrizione

When a Python package using a [PEP 420](https://peps.python.org/pep-0420) implicit namespace is installed in **editable** mode, it shadows/hides other packages installed in the same namespace. This makes the other packages in the shared namespace un-importable, leading to `ModuleNotFoundError`.

_Note: It's the same for both src and flat layouts._

**Steps to reproduce:**

Here is a minimal example with two packages, `project-dep` and `project-main`, which both live in the `company_namespace` implicit namespace. `project-main` depends on `project-dep`.

- **`project-dep`:**

```sh
project-dep/
├── pyproject.toml
└── company_namespace/
└── project_dep/
└── __init__.py
```

- **`project-main`:**

```sh
project-main/
├── pyproject.toml # dependencies: ["project-dep"]
├── meson.build
└── company_namespace/
└── project_main/
├── __init__.py
└── native.c
```

- **Setup:**

```sh
# Install build requirements
pip install meson-python

# Install project-dep
pip install ./project-dep

# Install project-main as editable
pip install --no-build-isolation -e ./project-main
```

- **Test:**

```sh
python
```

```py
>>> import company_namespace.project_main # This works fine
>>> import company_namespace.project_dep # ModuleNotFoundError
Traceback (most recent call last):
File "", line 1, in
import platform
ModuleNotFoundError: No module named 'company_namespace.project_dep'
```

**Example**

A ready-to-use example is set up here: [https://github.com/bastiensoucasse/mesonpy-namespace-editable](https://github.com/bastiensoucasse/mesonpy-namespace-editable).

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia dai file pyproject.toml dei due progetti di esempio e dal meson.build di project-main, quindi riproduci l’installazione editable usando i comandi pip elencati. Indaga sul motivo per cui l’importazione di project-main impedisce di trovare project-dep nel company_namespace condiviso; il lavoro è completato quando entrambe le importazioni funzionano sia per i layout src che per quelli flat.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
build-system
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.