On Sat, May 04, 2024 at 07:22:52PM +0200, Hartmut Goebel wrote:
> Am 04.05.24 um 13:12 schrieb Marc Haber:
> > Wnn ich in d/mc1.py dasselbe tun möchte,
> > muss ich dort "from mc2 import MyClass2" schreiben,
> 
> Ich vermute, Du musst "from ..mc2 import …" schreiben, da Du das Modul
> relativ zu mc1 "adressieren" musst. Falls es bei Dir ohne ".." ist irgendwas
> faul.

Das funktioniert so wie ich es geschrieben habe. Im etwas konkreteren
Fall:

[37/5247]mh@swivel:~/git/zg2dns $ grep -E 'class|import' get-root zg2dns/*
get-root:from zg2dns.rootdata import DNSRootDataParser
zg2dns/query.py:from rootdata import DNSRootDataParser
zg2dns/query.py:class Zg2DNSQuery:
zg2dns/rootdata.py:class DNSRootDataParser:

Sowohl der Code in zg2dns/query-py als auch der code in get-root
benutzen die Klasse DNSRootDataParser, und das funktioniert auch:

2 [38/5247]mh@swivel:~/git/zg2dns $ zg2dns/query.py
2024-05-05 10:07:50.360 | DEBUG    | __main__:<module>:309 - 
rootservers.get_ipv4_servers()=['198.41.0.4', '199.9.14.201', '192.33.4.12', 
'199.7.91.13', '192.203.230.10', '192.5.5.241', '192.112.36.4', 
'198.97.190.53', '192.36.148.17', '192.58.128.30', '193.0.14.129', 
'199.7.83.42', '202.12.27.33']
2024-05-05 10:07:50.360 | DEBUG    | __main__:<module>:310 - 
rootservers.get_ipv6_servers()=['2001:503:ba3e::2:30', '2001:500:200::b', 
'2001:500:2::c', '2001:500:2d::d', '2001:500:a8::e', '2001:500:2f::f', 
'2001:500:12::d0d', '2001:500:1::53', '2001:7fe::53', '2001:503:c27::2:30', 
'2001:7fd::1', '2001:500:9f::42', '2001:dc3::35']
2024-05-05 10:07:50.360 | DEBUG    | __main__:<module>:311 - 
rootservers.get_all_servers()=['198.41.0.4', '199.9.14.201', '192.33.4.12', 
'199.7.91.13', '192.203.230.10', '192.5.5.241', '192.112.36.4', 
'198.97.190.53', '192.36.148.17', '192.58.128.30', '193.0.14.129', 
'199.7.83.42', '202.12.27.33', '2001:503:ba3e::2:30', '2001:500:200::b', 
'2001:500:2::c', '2001:500:2d::d', '2001:500:a8::e', '2001:500:2f::f', 
'2001:500:12::d0d', '2001:500:1::53', '2001:7fe::53', '2001:503:c27::2:30', 
'2001:7fd::1', '2001:500:9f::42', '2001:dc3::35']
2024-05-05 10:07:50.361 | DEBUG    | __main__:<module>:312 - 
rootservers()=['198.41.0.4', '199.9.14.201', '192.33.4.12', '199.7.91.13', 
'192.203.230.10', '192.5.5.241', '192.112.36.4', '198.97.190.53', 
'192.36.148.17', '192.58.128.30', '193.0.14.129', '199.7.83.42', 
'202.12.27.33', '2001:503:ba3e::2:30', '2001:500:200::b', '2001:500:2::c', 
'2001:500:2d::d', '2001:500:a8::e', '2001:500:2f::f', '2001:500:12::d0d', 
'2001:500:1::53', '2001:7fe::53', '2001:503:c27::2:30', '2001:7fd::1', 
'2001:500:9f::42', '2001:dc3::35']
[39/5247]mh@swivel:~/git/zg2dns $ ./get-root
IPv4 Root Servers: ['198.41.0.4', '199.9.14.201', '192.33.4.12', '199.7.91.13', 
'192.203.230.10', '192.5.5.241', '192.112.36.4', '198.97.190.53', 
'192.36.148.17', '192.58.128.30', '193.0.14.129', '199.7.83.42', '202.12.27.33']
IPv6 Root Servers: ['2001:503:ba3e::2:30', '2001:500:200::b', '2001:500:2::c', 
'2001:500:2d::d', '2001:500:a8::e', '2001:500:2f::f', '2001:500:12::d0d', 
'2001:500:1::53', '2001:7fe::53', '2001:503:c27::2:30', '2001:7fd::1', 
'2001:500:9f::42', '2001:dc3::35']
All Root Servers: ['198.41.0.4', '199.9.14.201', '192.33.4.12', '199.7.91.13', 
'192.203.230.10', '192.5.5.241', '192.112.36.4', '198.97.190.53', 
'192.36.148.17', '192.58.128.30', '193.0.14.129', '199.7.83.42', 
'202.12.27.33', '2001:503:ba3e::2:30', '2001:500:200::b', '2001:500:2::c', 
'2001:500:2d::d', '2001:500:a8::e','2001:500:2f::f', '2001:500:12::d0d', 
'2001:500:1::53', '2001:7fe::53', '2001:503:c27::2:30', '2001:7fd::1', 
'2001:500:9f::42', '2001:dc3::35']
All Root Servers: ['198.41.0.4', '199.9.14.201', '192.33.4.12', '199.7.91.13', 
'192.203.230.10', '192.5.5.241', '192.112.36.4', '198.97.190.53', 
'192.36.148.17', '192.58.128.30', '193.0.14.129', '199.7.83.42', 
'202.12.27.33', '2001:503:ba3e::2:30', '2001:500:200::b', '2001:500:2::c', 
'2001:500:2d::d', '2001:500:a8::e','2001:500:2f::f', '2001:500:12::d0d', 
'2001:500:1::53', '2001:7fe::53', '2001:503:c27::2:30', '2001:7fd::1', 
'2001:500:9f::42', '2001:dc3::35']
[40/5247]mh@swivel:~/git/zg2dns $

Die Notation ..irgendwas ist also nicht notwendig.

> > kann also Code, der
> > "verwandte" Module benutzt, nicht frei verschieben.
> Ganz verstehe ich Deine Frage nicht, aber ich sag mal: Ja, das ist so
> gedacht. Woher sollte python denn sonst wissen, wo es "MyClass2" findet? Und
> in "keks" muss Du ja auch den "Pfad" zum Modul angeben - warum wollte das in
> einem Modul anders sein?

Ich finde es wenig schön dass man abhängig vom Ort der Nutzung
unterschiedliche Import-Statements schreiben muss, aber wenn das so ist
kann ich damit leben. Ich hatte das Verhalten halt nicht für pythonisch
gehalten.

In dnspython ist das auch nicht so geschrieben, z.B. steht in
/usr/lib/python3/dist-packages/dns/resolver.py immer das Predix dns in
den Imports dabei. Das funktioniert vermutlich, weil
/usr/lib/python3/dist-packages im Pythonpath steht.

Wäre ich dnspython-Entwickler, hätte ich ja meine workingcopy von mir
aus unter ~/git/dnspython ausgecheckt, und wenn ich irgendwas
ausprobiere, würde das "import dns.query" in
~/git/dnspython/dns/resolver.py ja das dns/query.py aus dem Pythonpath
anziehen und nicht das aus meiner Workingcopy, weil ich ja sicher auch
die Releaseversion der Library installiert hätte.

Wir arbeiten Modulentwicker in so einer Situation?

Grüße
Marc

-- 
-----------------------------------------------------------------------------
Marc Haber         | "I don't trust Computers. They | Mailadresse im Header
Leimen, Germany    |  lose things."    Winona Ryder | Fon: *49 6224 1600402
Nordisch by Nature |  How to make an American Quilt | Fax: *49 6224 1600421
_______________________________________________
python-de Mailingliste -- python-de@python.org
Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an 
python-de-le...@python.org
https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: arch...@mail-archive.com

Reply via email to