[Python-de] develop/editable-mode und "flaches" Package in "src"

1 view
Skip to first unread message

Hartmut Goebel

unread,
Mar 5, 2021, 3:52:35 AM3/5/21
to
Hallo zusammen,

ich habe eine etwas ungewöhnliche Paketstruktur:

.
├── setup.cfg
├── src
│   └── __init__.py
└── some_release_helper.py

Sowie in setup.cfg definiert:

[options]
packages = trytond.modules.country_order
package_dir =
trytond.modules.country_order=src

Was funktioniert: sdist, bdist und bdist_wheel funktionieren wie
gewünscht: Das Package __init__.py landet in
trytond/modules/country_order/__init__.py. und wenn ich es normal
installiere, landen die Datein dort, wo sie hingehören.

*Was nicht funktioniert*: Wenn ich das Paket mit "pip install -e ."
installiere:

* zeigt die "trytond-country-order.egg-link" *nicht* auf das "src"
Verzeichnis
* wird "trytond_country_order.egg-info" im Projekt-Verzeichnis angelegt

Das resultat ist, dass das Module nicht gefunden wird.

*Irgendwelche Ideen, woran das liegen könnte?*

Falls sich jemand über das etwas *ungewöhnliche Directory-Layout
wundert*: Tryton-Module haben dieses Layout, nur ohne "src" Directory.
Beispiel: <https://hg.tryton.org/modules/country/file/tip>. Da ich auf
oberster Verzeichnis-Ebene ein paar Module habe, die nicht in das bdist
sollen, möchte ich den eigentlichen Packet-Inhalt in das Verzeichnis
"src" verschieben.

--
Regards
Hartmut Goebel

| Hartmut Goebel | h.go...@crazy-compilers.com |
| www.crazy-compilers.com | compilers which you thought are impossible |

Julian Gethmann

unread,
Mar 5, 2021, 4:34:58 AM3/5/21
to
Hallo,

bei mir funktioniert es, wenn man statt
```
package_dir =
trytond.modules.country_order=src
```
```
package_dir =
=src
```
schreibt, also den Paketnamen nicht explizit nennt.
Allerdings verwende ich auch Namespace-Pakete.


Mit freundlichen Grüßen,

Julian Gethmann

Hartmut Goebel

unread,
Mar 5, 2021, 5:05:01 AM3/5/21
to
Hi,
> bei mir funktioniert es, wenn man statt

Habe nochmal alle Varianten durchgetestet:

| packages | package_dir || wheel | install -e |
+----------+-------------++-------+------------+
| gesetzt | gesetzt || okay | wrong |
+----------+-------------++-------+------------+
| gesetzt | leer || error | error |
+----------+-------------++-------+------------+
| gesetzt | "*" || error | error |
+----------+-------------++-------+------------+
| leer | gesetzt || wrong | wrong |
+----------+-------------++-------+------------+
| leer | leer || wrong | okay |


error: package directory 'src/trytond/modules/country_order' does not exist


> Allerdings verwende ich auch Namespace-Pakete.
Meinst Du damit, dass Dein Package in src//trytond/modules/country_order
ist (bzw. wäre)? Ja, damit geht es. Aber ich will halt die unnötigen
Verzeichnis-Ebenen nicht haben :-)

Julian Gethmann

unread,
Mar 5, 2021, 5:11:10 AM3/5/21
to

Hi,


> | packages | package_dir || wheel | install -e |
> +----------+-------------++-------+------------+
> | gesetzt  | gesetzt     || okay  |  wrong     |
heißt package_dir gesetzt hier
```
package_dir =
trytond.modules.country_order=src
```
oder (meine Variante)
```
package_dir =
=src
```
? (Ist ja auch gesetzt, aber auf `=src` statt auf
`trytond.modules.country_order=src`)
>> Allerdings verwende ich auch Namespace-Pakete.
> Meinst Du damit, dass Dein Package in src//trytond/modules/country_order
> ist (bzw. wäre)? Ja, damit geht es. Aber ich will halt die unnötigen
> Verzeichnis-Ebenen nicht haben :-)
Ja, bei mir wären die Module dann in src/trytond/modules/country_order
und in der setup.cfg stünde zusätzlich
`packages = find_namespace:`
Aber, ja, das ist von der Struktur her anders.

Hartmut Goebel

unread,
Mar 5, 2021, 5:24:28 AM3/5/21
to
Am 05.03.21 um 11:11 schrieb Julian Gethmann:
> heißt package_dir gesetzt hier

Danke der Nachfrage.

packages "set": `packages = trytond.modules.country_order`
packages "empty": `packages = `
package_dir "set": `package_dir =  \n trytond.modules.country_order=src`
package_dir "empty": `package_dir =  \n trytond.modules.country_order=src`

Das ganze scheint eo Bug in setuptools zu sein:
https://github.com/pypa/setuptools/issues/1801

Julian Gethmann

unread,
Mar 5, 2021, 6:37:43 AM3/5/21
to


On 05/03/2021 11:24, Hartmut Goebel wrote:
> packages "set": `packages = trytond.modules.country_order`
> packages "empty": `packages = `
> package_dir "set": `package_dir =  \n trytond.modules.country_order=src`
> package_dir "empty": `package_dir =  \n trytond.modules.country_order=src`
>
> Das ganze scheint eo Bug in setuptools zu sein:
> https://github.com/pypa/setuptools/issues/1801
Danke für die Erläuterung.In der Liste fehlt aber dann ja
RonnyPfannschmidts/meine Variante/workaround.
Ich konnte damit auch mit `packages = country_order` und
src/mein_test_name das Paket installierbar machen mit `pip -e .`, sodass
das trytond.modules.country_order.egg-info in src liegt. Also soweit
ohne den Namespace-Subordner.

Hartmut Goebel

unread,
Mar 5, 2021, 8:52:56 AM3/5/21
to
Am 05.03.21 um 12:37 schrieb Julian Gethmann:
> Ich konnte damit auch mit `packages = country_order` und
> src/mein_test_name das Paket installierbar machen mit `pip -e .`,
> sodass das trytond.modules.country_order.egg-info  in src liegt. Also
> soweit ohne den Namespace-Subordner.

Kannst Du bitte nochmal genau schrieben, was Du da gemacht hast?

"packages = country_order", "src/mein_test_name" und
"trytond.modules.country_order.egg-info" passen m.E.  nicht zusammen.
Außerdem sogt ""packages = country_order" dafür, dass das Paket eben
*nicht* trytond.modules.country_order (also qaulifiziert) heißt, sonder
nur "country_order".

Julian Gethmann

unread,
Mar 5, 2021, 10:11:19 AM3/5/21
to

> Außerdem sogt ""packages = country_order" dafür, dass das Paket eben
> *nicht* trytond.modules.country_order (also qaulifiziert) heißt, sonder
> nur "country_order".
Ja, das stimmt. Entschuldigung, das habe ich vorhin nicht getestet,
sondern nur auf die Struktur geachtet,
sodass sich in dem von mir beschriebenen Fall nur folgendes Verhalten
zeigt, das aber ja nicht das gewünschte ist:
python -m pip install -e . -> ok
python -c "import country_order" -> ok
python -c "import trytond.modules.country_order" -> ImportError

(und wenn ich `packages: trytond.modules.country_order` setzte,
scheitert pip install -e .)

> Kannst Du bitte nochmal genau schrieben, was Du da gemacht
hast?Auszug aus der setup.cfg:
[metadata]
name = trytond.modules.country_order
[options]
# Hier hast du recht s.u.
packages = country_order
package_dir =
=src
[options.packages.find]
where = src

Meine Verzeichnisstruktur:
├── setup.cfg
├── setup.py
├── src
│ ├── country_order
│ │ └── __init__.py
│ └── trytond.modules.country_order.egg-info <-- wird erst durch pip
erzeugt
> "packages = country_order", "src/mein_test_name" und
> "trytond.modules.country_order.egg-info" passen m.E. nicht
zusammen.mein_test_name sollte hier auch country_order sein, wobei ich
es erst überall mit meinem namen hatte, sorry.

Entschuldigt bitte die Verwirrung.

Julian

Hartmut Goebel

unread,
Mar 6, 2021, 11:17:14 AM3/6/21
to
Am 05.03.21 um 16:11 schrieb Julian Gethmann:
> Entschuldigung, das habe ich vorhin nicht getestet

Passt schon. Ich hätte mich ja gefreut, wenn Du recht gehabt hättest :-)
Reply all
Reply to author
Forward
0 new messages