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