Rocksolid Light

groups  faq  privacy  How to post  login

Message-ID:  

Alas, how love can trifle with itself! -- William Shakespeare, "The Two Gentlemen of Verona"


rocksolid / de.comp.lang.python / Re: [Python-de] Pfade, Modulnamen und import-Statements

SubjectAuthor
* [Python-de] Pfade, Modulnamen und import-StatementsMarc Haber
+* [Python-de] Re: Pfade, Modulnamen und import-StatementsHartmut Goebel
|`* [Python-de] Re: Pfade, Modulnamen und import-StatementsMarc Haber
| `* Re: [Python-de] Re: Pfade, Modulnamen und import-StatementsBastian Blank
|  +- Re: Pfade, Modulnamen und import-StatementsStefan Ram
|  `* [Python-de] Re: Pfade, Modulnamen und import-StatementsMarc Haber
|   `- [Python-de] Re: Pfade, Modulnamen und import-StatementsHartmut Goebel
+* Re: [Python-de] Pfade, Modulnamen und import-StatementsPeter J. Holzer
|`* [Python-de] Re: Pfade, Modulnamen und import-StatementsMarc Haber
| `* Re: [Python-de] Re: Pfade, Modulnamen und import-StatementsPeter J. Holzer
|  `* [Python-de] Re: Pfade, Modulnamen und import-StatementsMarc Haber
|   `- Re: [Python-de] Re: Pfade, Modulnamen und import-StatementsPeter J. Holzer
+* Re: [Python-de] Pfade, Modulnamen und import-StatementsHermann Riemann
|`- [Python-de] Re: Pfade, Modulnamen und import-StatementsMarc Haber
`* Re: [Python-de] Pfade, Modulnamen und import-StatementsHermann Riemann
 `* Re: [Python-de] Pfade, Modulnamen und import-StatementsStefan Ram
  `* Re: [Python-de] Pfade, Modulnamen und import-StatementsStefan Ram
   `- [Python-de] Re: Pfade, Modulnamen und import-StatementsChristopher Arndt

1
Subject: [Python-de] Pfade, Modulnamen und import-Statements
From: Marc Haber
Newsgroups: de.comp.lang.python
Date: Sat, 4 May 2024 11:12 UTC
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: mh+pytho...@zugschlus.de (Marc Haber)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Pfade,_Modulnamen_und_import-Statements
Date: Sat, 4 May 2024 13:12:06 +0200
Lines: 23
Message-ID: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de csD6GVIVooOUguaC0Y/x5AEUiZkWOf/ZZGYl23SmbIGg==
Cancel-Lock: sha1:QrWSNP2gBYOQqy1/FS8eIAxPryM= sha256:MwkV4RVlH7oz34Q89k+1IpRLzfP0axabfX7JrTXs3R4=
Authentication-Results: mail.python.org; dkim=none reason="no signature";
dkim-adsp=none (unprotected policy); dkim-atps=neutral
Content-Disposition: inline
User-Agent: Mutt/2.2.12 (2023-09-09)
X-MailFrom: mh+python-de@zugschlus.de
X-Mailman-Rule-Hits: member-moderation
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address
Message-ID-Hash: QKEX2RWOJZOIP4RMKAFNCXQD3N7YBIDP
X-Message-ID-Hash: QKEX2RWOJZOIP4RMKAFNCXQD3N7YBIDP
X-Mailman-Approved-At: Sat, 04 May 2024 07:57:23 -0400
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/QKEX2RWOJZOIP4RMKAFNCXQD3N7YBIDP/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

Hallo,

ich hab mal eine Verständnisfrage.

Gegeben sei ein Verzeichnis . und ein Programm ./keks.
Weiterhin sei die Klasse MyClass1 in d/mc1.py und die Klasse MyClass2 in
d/mc2.py definierrt.

Wenn ich nun in keks die Klasse MyClass2 benutzen möchte, schreibe ich
"from d.mc2 import MyClass2". Wnn ich in d/mc1.py dasselbe tun möchte,
muss ich dort "from mc2 import MyClass2" schreiben, kann also Code, der
"verwandte" Module benutzt, nicht frei verschieben.

Ist das so gedacht, oder verpass ich da was?

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

Subject: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Hartmut Goebel
Newsgroups: de.comp.lang.python
Organization: crazy-compilers.com
Date: Sat, 4 May 2024 17:22 UTC
References: 1
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: h.goe...@crazy-compilers.com (Hartmut Goebel)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Re:_Pfade,_Modulnamen_und_import-Statements
Date: Sat, 4 May 2024 19:22:52 +0200
Organization: crazy-compilers.com
Lines: 15
Message-ID: <a1b0c3e8-9e07-4cde-9b19-2bc800d51db0@crazy-compilers.com>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64
X-Trace: news.uni-berlin.de u6CGESro0dP/5hO3pjeh7QW18ndtfqfF1/gU1lxmXlqg==
Cancel-Lock: sha1:MLisxsS2jJkMLJ84D9RROrnp92I= sha256:YrbvNXQ7t6M2U2o+Y2SfYO4TmwtF8AUr3+V18C0LTSY=
Authentication-Results: mail.python.org; dkim=none reason="no signature";
dkim-adsp=none (unprotected policy); dkim-atps=neutral
User-Agent: Mozilla Thunderbird
Content-Language: de-DE, en-US
In-Reply-To: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
X-Noris-IP: 79.211.178.78
Message-ID-Hash: 25FRYARXWXXFPLBZ6TZOVGHI26WWKVE2
X-Message-ID-Hash: 25FRYARXWXXFPLBZ6TZOVGHI26WWKVE2
X-MailFrom: h.goebel@crazy-compilers.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-python-de.python.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Content-Filtered-By: Mailman/MimeDel 3.3.10b1
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/25FRYARXWXXFPLBZ6TZOVGHI26WWKVE2/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

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.
> 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?
--
Regards
Hartmut Goebel
| Hartmut Goebel |h.goebel@crazy-compilers.com |
|www.crazy-compilers.com | compilers which you thought are impossible |

Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
From: Peter J. Holzer
Newsgroups: de.comp.lang.python
Organization: LUGA
Date: Sun, 5 May 2024 00:26 UTC
References: 1
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsfeed.xs3.de!tahina.priv.at!news.luga.at!.POSTED.212.17.106.130!not-for-mail
From: hjp-usen...@hjp.at (Peter J. Holzer)
Newsgroups: de.comp.lang.python
Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
Date: Sun, 5 May 2024 02:26:02 +0200
Organization: LUGA
Message-ID: <slrnv3dkgq.14mcq.hjp-usenet4@trintignant.hjp.at>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Injection-Info: vinge.luga.at; posting-host="212.17.106.130";
logging-data="13882"; mail-complaints-to="usenet@vinge.luga.at"
User-Agent: slrn/1.0.3 (Linux)
Cancel-Lock: sha1:Q+JNzsqAnb1GMxuFllheemjupmU=
View all headers

On 2024-05-04 11:12, Marc Haber <mh+python-de@zugschlus.de> wrote:
> ich hab mal eine Verständnisfrage.
>
> Gegeben sei ein Verzeichnis . und ein Programm ./keks.
> Weiterhin sei die Klasse MyClass1 in d/mc1.py und die Klasse MyClass2 in
> d/mc2.py definierrt.
>
> Wenn ich nun in keks die Klasse MyClass2 benutzen möchte, schreibe ich
> "from d.mc2 import MyClass2". Wnn ich in d/mc1.py dasselbe tun möchte,
> muss ich dort "from mc2 import MyClass2" schreiben,

Nein, das funktioniert nicht:

#v+
% ./keks
Traceback (most recent call last):
File "/home/hjp/tmp/marc/./keks", line 3, in <module>
from d.mc1 import MyClass1
File "/home/hjp/tmp/marc/d/mc1.py", line 1, in <module>
from mc2 import MyClass2
ModuleNotFoundError: No module named 'mc2'
#v-

Es muss

#v+
from d.mc2 import MyClass2
#v-

heißen. Ob Du das Modul von keks oder von einem anderen Modul aus
importierst, macht keinen Unterschied.

> kann also Code, der
> "verwandte" Module benutzt, nicht frei verschieben.
>
> Ist das so gedacht, oder verpass ich da was?

Wie Hartmut schon geschrieben hat, kannst
Du relative Imports verwendenm, hier also

#v+
from .mc2 import MyClass2
#v-

Ob das für Deinen Code sinnvoll ist, musst du selbst entscheiden.

hp

Subject: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Marc Haber
Newsgroups: de.comp.lang.python
Date: Sun, 5 May 2024 08:21 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: mh+pytho...@zugschlus.de (Marc Haber)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Re:_Pfade,_Modulnamen_und_import-Statements
Date: Sun, 5 May 2024 10:21:57 +0200
Lines: 69
Message-ID: <ZjdBpXoZUmsZAWaG@torres.zugschlus.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<a1b0c3e8-9e07-4cde-9b19-2bc800d51db0@crazy-compilers.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de vNhGk5VfW2sIfiD14fxT+As4gxQtJYSgCPRh9lsYQk0w==
Cancel-Lock: sha1:kjmiP9Z0ttwUyPeeQ71aPa2Dn0I= sha256:8aEIj1XAtfzRFXmFteCFpY6olQIpkfxN7N4ygWPIg0I=
Authentication-Results: mail.python.org; dkim=none reason="no signature";
dkim-adsp=none (unprotected policy); dkim-atps=neutral
Content-Disposition: inline
In-Reply-To: <a1b0c3e8-9e07-4cde-9b19-2bc800d51db0@crazy-compilers.com>
User-Agent: Mutt/2.2.12 (2023-09-09)
X-MailFrom: mh+python-de@zugschlus.de
X-Mailman-Rule-Hits: member-moderation
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address
Message-ID-Hash: TA3KZCV5G6O22GW3F2XZBBHWDBSJPRMF
X-Message-ID-Hash: TA3KZCV5G6O22GW3F2XZBBHWDBSJPRMF
X-Mailman-Approved-At: Sun, 05 May 2024 04:29:58 -0400
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/TA3KZCV5G6O22GW3F2XZBBHWDBSJPRMF/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

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

Subject: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Marc Haber
Newsgroups: de.comp.lang.python
Date: Sun, 5 May 2024 08:25 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: mh+pytho...@zugschlus.de (Marc Haber)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Re:_Pfade,_Modulnamen_und_import-Statements
Date: Sun, 5 May 2024 10:25:26 +0200
Lines: 45
Message-ID: <ZjdCdg94EQs3zPul@torres.zugschlus.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<slrnv3dkgq.14mcq.hjp-usenet4@trintignant.hjp.at>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de Y0fwUZ54/SbK9iAqt2BUzAHWhhFkEfauQSwsgXjyqWSA==
Cancel-Lock: sha1:u7LapZilvOYDG1detp9DCZ1sB3I= sha256:XN6l2dCXZeLmhCUYXHqVBsDtsbysTogjopy9TVeuHcA=
Authentication-Results: mail.python.org; dkim=none reason="no signature";
dkim-adsp=none (unprotected policy); dkim-atps=neutral
Content-Disposition: inline
In-Reply-To: <slrnv3dkgq.14mcq.hjp-usenet4@trintignant.hjp.at>
User-Agent: Mutt/2.2.12 (2023-09-09)
X-MailFrom: mh+python-de@zugschlus.de
X-Mailman-Rule-Hits: member-moderation
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address
Message-ID-Hash: WPJ7DJF7OHE6KEB5UXYUFYQMAGWQYVCV
X-Message-ID-Hash: WPJ7DJF7OHE6KEB5UXYUFYQMAGWQYVCV
X-Mailman-Approved-At: Sun, 05 May 2024 04:29:58 -0400
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/WPJ7DJF7OHE6KEB5UXYUFYQMAGWQYVCV/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

On Sun, May 05, 2024 at 02:26:02AM +0200, Peter J. Holzer wrote:
> On 2024-05-04 11:12, Marc Haber <mh+python-de@zugschlus.de> wrote:
> > ich hab mal eine Verständnisfrage.
> >
> > Gegeben sei ein Verzeichnis . und ein Programm ./keks.
> > Weiterhin sei die Klasse MyClass1 in d/mc1.py und die Klasse MyClass2 in
> > d/mc2.py definierrt.
> >
> > Wenn ich nun in keks die Klasse MyClass2 benutzen möchte, schreibe ich
> > "from d.mc2 import MyClass2". Wnn ich in d/mc1.py dasselbe tun möchte,
> > muss ich dort "from mc2 import MyClass2" schreiben,
>
> Nein, das funktioniert nicht:
>
> #v+
> % ./keks
> Traceback (most recent call last):
> File "/home/hjp/tmp/marc/./keks", line 3, in <module>
> from d.mc1 import MyClass1
> File "/home/hjp/tmp/marc/d/mc1.py", line 1, in <module>
> from mc2 import MyClass2
> ModuleNotFoundError: No module named 'mc2'
> #v-

Mein mc1.py hat eingebauten testcode:

#v+
if __name__ == "__main__":
zdns = Zg2DNSQuery(timeout=2, debug=True)

rootservers = DNSRootDataParser()
logger.debug(f"{rootservers.get_ipv4_servers()=}")
#v-

verhält sich der vielleicht anders als wenn man nur das Modul
importiert? Das wäre dann ja noch viel schlimmer ;-)

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

Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
From: Hermann Riemann
Newsgroups: de.comp.lang.python
Date: Sun, 5 May 2024 10:02 UTC
References: 1
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: nospam...@hermann-riemann.de (Hermann Riemann)
Newsgroups: de.comp.lang.python
Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
Date: Sun, 5 May 2024 12:02:34 +0200
Lines: 22
Message-ID: <l9p3pqFr2biU1@mid.individual.net>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: individual.net xf446sEOt3sn/JQQe5UKbApjDqCetpwLNdvu9ufKOhX/txjH5C
Cancel-Lock: sha1:kzzif5QsvMO/LE4xTjGndwRCHQ8= sha256:Ro8Zib5kGPr0Z+IFwIbRy3phxWojSeh5/YG46FKKTtw=
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Thunderbird/68.2.1
In-Reply-To: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
Content-Language: de-DE
View all headers

Am 04.05.24 um 13:12 schrieb Marc Haber:

> ich hab mal eine Verständnisfrage.
>
> Gegeben sei ein Verzeichnis . und ein Programm ./keks.
> Weiterhin sei die Klasse MyClass1 in d/mc1.py und die Klasse MyClass2 in
> d/mc2.py definierrt.
>
> Wenn ich nun in keks die Klasse MyClass2 benutzen möchte, schreibe ich
> "from d.mc2 import MyClass2". Wnn ich in d/mc1.py dasselbe tun möchte,
> muss ich dort "from mc2 import MyClass2" schreiben, kann also Code, der
> "verwandte" Module benutzt, nicht frei verschieben.
>
> Ist das so gedacht, oder verpass ich da was?

Bei Pfadproblemen verwende ich sys.path.append(

Hermann
der das #include ../ich.h für gemeinsames vermisst.

--
<http://www.hermann-riemann.de>

Subject: Re: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Bastian Blank
Newsgroups: de.comp.lang.python
Organization: A thinking site
Date: Sun, 5 May 2024 10:32 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!news.datentrampelpfad.de!thinkmo.de!.POSTED.shell.thinkmo.de!not-for-mail
From: use...@waldi.eu.org (Bastian Blank)
Newsgroups: de.comp.lang.python
Subject: Re: [Python-de] Re: Pfade, Modulnamen und import-Statements
Date: Sun, 5 May 2024 10:32:28 -0000 (UTC)
Organization: A thinking site
Message-ID: <slrnv3eo1s.mt.usenet@mobilewave.waldi.eu.org>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<a1b0c3e8-9e07-4cde-9b19-2bc800d51db0@crazy-compilers.com>
<ZjdBpXoZUmsZAWaG@torres.zugschlus.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 5 May 2024 10:32:28 -0000 (UTC)
Injection-Info: news.thinkmo.de; posting-host="shell.thinkmo.de:2a01:4f8:271:3f5c:0:22:0:1";
logging-data="52212"; mail-complaints-to="abuse@thinkmo.de"
User-Agent: slrn/1.0.3 (Linux)
View all headers

Marc Haber wrote:
> [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:

Versuche mal "zg2dns.query" zu importieren:

| Traceback (most recent call last):
| File "/tmp/t/test", line 3, in <module>
| import zg2dns.query
| File "/tmp/t/zg2dns/query.py", line 1, in <module>
| from rootdata import DNSRootDataParser
| ModuleNotFoundError: No module named 'rootdata'

> 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.

Dein Fehler ist ein komplett anderer.

Der Python-Interpreter fügt das Verzeichnis, in dem das aktuelle Script
liegt, dem Suchpfad hinzu.

Rufst du "get-root" auf, dann ist es ".". Damit findet "import
zg2dns.rootdata" auch "zg2dns/rootdata.py".

Rufst du aber "zg2dns/query.py" direkt auf, dann ist auf einmal
das Verzeichnis "zg2dns" im Suchpfad. Also referenziert "import
rootdata" auf einmal was anderes.

> 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.

Dafür gibt es "pip install -e ." z.B. Damit macht man das aktuelle
Projekt im globalen Suchpfad des benutzten Interpreters verfügbar.

> Wir arbeiten Modulentwicker in so einer Situation?

Module werden nicht als Scripte direkt aufgerufen, sind also auch nie
ausführbar. Statt dessen werden sie mittels "python3 -m" aufgerufen.

Im nächsten Schritt kommen dann Entry-Points, aus denen dann Scripte
entstehen, welche in $prefix/bin landen.

Bastian

Subject: Re: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Peter J. Holzer
Newsgroups: de.comp.lang.python
Organization: LUGA
Date: Sun, 5 May 2024 10:38 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsfeed.xs3.de!tahina.priv.at!news.luga.at!.POSTED.212.17.106.130!not-for-mail
From: hjp-usen...@hjp.at (Peter J. Holzer)
Newsgroups: de.comp.lang.python
Subject: Re: [Python-de] Re: Pfade, Modulnamen und import-Statements
Date: Sun, 5 May 2024 12:38:18 +0200
Organization: LUGA
Message-ID: <slrnv3eocq.16cpt.hjp-usenet4@trintignant.hjp.at>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<slrnv3dkgq.14mcq.hjp-usenet4@trintignant.hjp.at>
<ZjdCdg94EQs3zPul@torres.zugschlus.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Injection-Info: vinge.luga.at; posting-host="212.17.106.130";
logging-data="28250"; mail-complaints-to="usenet@vinge.luga.at"
User-Agent: slrn/1.0.3 (Linux)
Cancel-Lock: sha1:j/oxl6tt4pbmuSxPi7eL6u4m95s=
View all headers

On 2024-05-05 08:25, Marc Haber <mh+python-de@zugschlus.de> wrote:
> On Sun, May 05, 2024 at 02:26:02AM +0200, Peter J. Holzer wrote:
>> On 2024-05-04 11:12, Marc Haber <mh+python-de@zugschlus.de> wrote:
>> > ich hab mal eine Verständnisfrage.
>> >
>> > Gegeben sei ein Verzeichnis . und ein Programm ./keks.
>> > Weiterhin sei die Klasse MyClass1 in d/mc1.py und die Klasse MyClass2 in
>> > d/mc2.py definierrt.
>> >
>> > Wenn ich nun in keks die Klasse MyClass2 benutzen möchte, schreibe ich
>> > "from d.mc2 import MyClass2". Wnn ich in d/mc1.py dasselbe tun möchte,
>> > muss ich dort "from mc2 import MyClass2" schreiben,
>>
>> Nein, das funktioniert nicht:
>>
>> #v+
>> % ./keks
>> Traceback (most recent call last):
>> File "/home/hjp/tmp/marc/./keks", line 3, in <module>
>> from d.mc1 import MyClass1
>> File "/home/hjp/tmp/marc/d/mc1.py", line 1, in <module>
>> from mc2 import MyClass2
>> ModuleNotFoundError: No module named 'mc2'
>> #v-
>
> Mein mc1.py hat eingebauten testcode:
>
> #v+
> if __name__ == "__main__":
> zdns = Zg2DNSQuery(timeout=2, debug=True)
>
> rootservers = DNSRootDataParser()
> logger.debug(f"{rootservers.get_ipv4_servers()=}")
> #v-

Ah, dachte ich mir, dass da eine wichtige Information fehlt ;-).

> verhält sich der vielleicht anders als wenn man nur das Modul
> importiert? Das wäre dann ja noch viel schlimmer ;-)

Wenn Du ein Script aufrufst, wird das Directory des Scripts in sys.path
eingefügt. Dadurch wird dann bei einem "import m" u.a. auch nach
"full_path_to_script_dir/m.py" gesucht und damit funktioniert der
Import.

Zum Testen von komplexeren Packages ist das aber wenig hilfreich, weil
im echten Einsatz natürlich nicht irgendwelche Subdirectorys der
Package-Hierarchie im Suchpfad stehen und man, wenn man ein Modul aus
einem Package direkt aufruft, die Package-Hierarchie verliert und damit
relative Imports nicht funktionieren:

#v+
% python3 d/mc1.py
__main__ ['/home/hjp/tmp/marc/d', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/hjp/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
Traceback (most recent call last):
File "/home/hjp/tmp/marc/d/mc1.py", line 4, in <module>
from .mc2 import MyClass2
ImportError: attempted relative import with no known parent package
#v-

Unter anderem auch aus diesem Grund schreibe ich Test-Code immer in
eigene Files.

hp

Subject: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Marc Haber
Newsgroups: de.comp.lang.python
Date: Sun, 5 May 2024 10:35 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: mh+pytho...@zugschlus.de (Marc Haber)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Re:_Pfade,_Modulnamen_und_import-Statements
Date: Sun, 5 May 2024 12:35:55 +0200
Lines: 15
Message-ID: <ZjdhC_OIf0zEq7co@torres.zugschlus.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<l9p3pqFr2biU1@mid.individual.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de OuPaVbaTrNNhAZK14r/hBAbTrIpe7hQ0f6FytzIW4RZw==
Cancel-Lock: sha1:YiJm/DuHmX2Q5Avlw1r8B3OVljA= sha256:KFX/2zfMQIFijR2nvfpga7Ex6rk9an8emJ38tS0GBnw=
Authentication-Results: mail.python.org; dkim=none reason="no signature";
dkim-adsp=none (unprotected policy); dkim-atps=neutral
Content-Disposition: inline
In-Reply-To: <l9p3pqFr2biU1@mid.individual.net>
User-Agent: Mutt/2.2.12 (2023-09-09)
X-MailFrom: mh+python-de@zugschlus.de
X-Mailman-Rule-Hits: member-moderation
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address
Message-ID-Hash: PXVMB572EGGNMUDPHINZJPKYTIQJMS2U
X-Message-ID-Hash: PXVMB572EGGNMUDPHINZJPKYTIQJMS2U
X-Mailman-Approved-At: Sun, 05 May 2024 14:34:13 -0400
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/PXVMB572EGGNMUDPHINZJPKYTIQJMS2U/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

On Sun, May 05, 2024 at 12:02:34PM +0200, Hermann Riemann wrote:
> Bei Pfadproblemen verwende ich sys.path.append(

In Klassen- und Moduldefinitionen und importen? Echt jetzt?

Oder hast Du nur die Frage nicht verstanden?

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

Subject: Re: Pfade, Modulnamen und import-Statements
From: Stefan Ram
Newsgroups: de.comp.lang.python
Organization: Stefan Ram
Date: Wed, 8 May 2024 10:14 UTC
References: 1 2 3 4 5
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram...@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: de.comp.lang.python
Subject: Re: Pfade, Modulnamen und import-Statements
Date: 8 May 2024 10:14:42 GMT
Organization: Stefan Ram
Lines: 11
Expires: 1 Feb 2025 11:59:58 GMT
Message-ID: <script-20240508111337@ram.dialup.fu-berlin.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de> <a1b0c3e8-9e07-4cde-9b19-2bc800d51db0@crazy-compilers.com> <ZjdBpXoZUmsZAWaG@torres.zugschlus.de> <la0t13F1s8iU1@mid.individual.net> <slrnv3eo1s.mt.usenet@mobilewave.waldi.eu.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de uAMMGcnYmbNg27byD3b/wQe/L71LcXI/RCkASC/PnEgDR9
Cancel-Lock: sha1:TaR9DsdNq43SOTvPOVUprdWdeSA= sha256:HETOnb0RuhqPGe0MFefPRLGPzNT3dcEERfg4RT8QggU=
X-Copyright: (C) Copyright 2024 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: de-DE-1901
View all headers

Bastian Blank <usenet@waldi.eu.org> schrieb oder zitierte:
>Module werden nicht als Scripte direkt aufgerufen, sind also auch nie
>ausführbar.

Dazu möchte ich hier einmal zitieren, was Greg Ewing gerade
in "comp.lang.python" schrieb:

|A script is a module, so everything that applies to modules
|also applies to scripts.

.

Subject: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Marc Haber
Newsgroups: de.comp.lang.python
Date: Fri, 10 May 2024 09:37 UTC
References: 1 2 3 4
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: mh+pytho...@zugschlus.de (Marc Haber)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Re:_Pfade,_Modulnamen_und_import-Statements
Date: Fri, 10 May 2024 11:37:21 +0200
Lines: 48
Message-ID: <Zj3q0Y19HfBbszdv@torres.zugschlus.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<a1b0c3e8-9e07-4cde-9b19-2bc800d51db0@crazy-compilers.com>
<ZjdBpXoZUmsZAWaG@torres.zugschlus.de>
<slrnv3eo1s.mt.usenet@mobilewave.waldi.eu.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de gxA43SCE+12oaFZQmp+hRAv26o8IAoeOwKbErW4CWFQA==
Cancel-Lock: sha1:wnx8EoAc9lACicb7S9z0CJPfxuM= sha256:7iKaOl4115lMVkL2ilUhCvnBRGtYiw7LTCyYl+6izvY=
Authentication-Results: mail.python.org; dkim=none reason="no signature";
dkim-adsp=none (unprotected policy); dkim-atps=neutral
Content-Disposition: inline
In-Reply-To: <slrnv3eo1s.mt.usenet@mobilewave.waldi.eu.org>
User-Agent: Mutt/2.2.12 (2023-09-09)
X-MailFrom: mh+python-de@zugschlus.de
X-Mailman-Rule-Hits: member-moderation
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address
Message-ID-Hash: 3CLM74O6AEJCEVOT226CGBSUXC4HGSR2
X-Message-ID-Hash: 3CLM74O6AEJCEVOT226CGBSUXC4HGSR2
X-Mailman-Approved-At: Fri, 10 May 2024 08:14:02 -0400
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/3CLM74O6AEJCEVOT226CGBSUXC4HGSR2/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

On Sun, May 05, 2024 at 10:32:28AM -0000, Bastian Blank wrote:
> Marc Haber wrote:
> > [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:
>
> Versuche mal "zg2dns.query" zu importieren

Wo?

> Der Python-Interpreter fügt das Verzeichnis, in dem das aktuelle Script
> liegt, dem Suchpfad hinzu.
>
> Rufst du "get-root" auf, dann ist es ".". Damit findet "import
> zg2dns.rootdata" auch "zg2dns/rootdata.py".
>
> Rufst du aber "zg2dns/query.py" direkt auf, dann ist auf einmal
> das Verzeichnis "zg2dns" im Suchpfad. Also referenziert "import
> rootdata" auf einmal was anderes.

Also muss ich abhängig von dem Ort wo mein Skript liegt unterschiedliche
import-Statements benutzen, das finde ich mindestens unschön. Aber jetzt
wo ich es weiß kann ich aes natürlich machen.

> Dafür gibt es "pip install -e ." z.B. Damit macht man das aktuelle
> Projekt im globalen Suchpfad des benutzten Interpreters verfügbar.

Aber hoffentlich nur im Environment einer Subshell? Oder ist das
persistentes Herumfummeln im System? Wenn ja, wo?

> > Wir arbeiten Modulentwicker in so einer Situation?
>
> Module werden nicht als Scripte direkt aufgerufen, sind also auch nie
> ausführbar. Statt dessen werden sie mittels "python3 -m" aufgerufen.

Das Python Tutorial Kapitel 6.1.1 "Executing modules as scripts" stelt
das als ganz praktisches Feature dar.

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

Subject: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Marc Haber
Newsgroups: de.comp.lang.python
Date: Fri, 10 May 2024 09:39 UTC
References: 1 2 3 4
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: mh+pytho...@zugschlus.de (Marc Haber)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Re:_Pfade,_Modulnamen_und_import-Statements
Date: Fri, 10 May 2024 11:39:48 +0200
Lines: 54
Message-ID: <Zj3rZAstdShbMuSt@torres.zugschlus.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<slrnv3dkgq.14mcq.hjp-usenet4@trintignant.hjp.at>
<ZjdCdg94EQs3zPul@torres.zugschlus.de>
<slrnv3eocq.16cpt.hjp-usenet4@trintignant.hjp.at>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de ZFtbkzn2nt+pIb/avxBEeA6kUWBESN/iHMZ6bjq7UwAQ==
Cancel-Lock: sha1:JpDhkv2zM8H5e/KUfYKfT4BlF4c= sha256:b5kSKM28iLquJKmo9omtKleavBrXNIu4vTVfgnMvklU=
Authentication-Results: mail.python.org; dkim=none reason="no signature";
dkim-adsp=none (unprotected policy); dkim-atps=neutral
Content-Disposition: inline
In-Reply-To: <slrnv3eocq.16cpt.hjp-usenet4@trintignant.hjp.at>
User-Agent: Mutt/2.2.12 (2023-09-09)
X-MailFrom: mh+python-de@zugschlus.de
X-Mailman-Rule-Hits: member-moderation
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address
Message-ID-Hash: S7R2C5BY5YSHO6FT2FANKNVMCZS6EOBP
X-Message-ID-Hash: S7R2C5BY5YSHO6FT2FANKNVMCZS6EOBP
X-Mailman-Approved-At: Fri, 10 May 2024 08:14:02 -0400
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/S7R2C5BY5YSHO6FT2FANKNVMCZS6EOBP/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

On Sun, May 05, 2024 at 12:38:18PM +0200, Peter J. Holzer wrote:
> On 2024-05-05 08:25, Marc Haber <mh+python-de@zugschlus.de> wrote:
> > On Sun, May 05, 2024 at 02:26:02AM +0200, Peter J. Holzer wrote:
> >> On 2024-05-04 11:12, Marc Haber <mh+python-de@zugschlus.de> wrote:
> >> > ich hab mal eine Verständnisfrage.
> >> >
> >> > Gegeben sei ein Verzeichnis . und ein Programm ./keks.
> >> > Weiterhin sei die Klasse MyClass1 in d/mc1.py und die Klasse MyClass2 in
> >> > d/mc2.py definierrt.
> >> >
> >> > Wenn ich nun in keks die Klasse MyClass2 benutzen möchte, schreibe ich
> >> > "from d.mc2 import MyClass2". Wnn ich in d/mc1.py dasselbe tun möchte,
> >> > muss ich dort "from mc2 import MyClass2" schreiben,
> >>
> >> Nein, das funktioniert nicht:
> >>
> >> #v+
> >> % ./keks
> >> Traceback (most recent call last):
> >> File "/home/hjp/tmp/marc/./keks", line 3, in <module>
> >> from d.mc1 import MyClass1
> >> File "/home/hjp/tmp/marc/d/mc1.py", line 1, in <module>
> >> from mc2 import MyClass2
> >> ModuleNotFoundError: No module named 'mc2'
> >> #v-
> >
> > Mein mc1.py hat eingebauten testcode:
> >
> > #v+
> > if __name__ == "__main__":
> > zdns = Zg2DNSQuery(timeout=2, debug=True)
> >
> > rootservers = DNSRootDataParser()
> > logger.debug(f"{rootservers.get_ipv4_servers()=}")
> > #v-
>
> Ah, dachte ich mir, dass da eine wichtige Information fehlt ;-).

Welche? Dass ich den Empfehlungen des Python Tutorials, Kapitel 6.1.1
"Executing modules as scripts" gefolgt bin? War das falsch?

> Unter anderem auch aus diesem Grund schreibe ich Test-Code immer in
> eigene Files.

So werde ich das dann jetzt wohl auch halten. Schade.

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

Subject: Re: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Peter J. Holzer
Newsgroups: de.comp.lang.python
Organization: LUGA
Date: Fri, 10 May 2024 17:25 UTC
References: 1 2 3 4 5
Path: i2pn2.org!i2pn.org!news.quux.org!newsfeed.xs3.de!tahina.priv.at!news.luga.at!.POSTED.212.17.106.130!not-for-mail
From: hjp-usen...@hjp.at (Peter J. Holzer)
Newsgroups: de.comp.lang.python
Subject: Re: [Python-de] Re: Pfade, Modulnamen und import-Statements
Date: Fri, 10 May 2024 19:25:40 +0200
Organization: LUGA
Message-ID: <slrnv3sm4l.1tos.hjp-usenet4@trintignant.hjp.at>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<slrnv3dkgq.14mcq.hjp-usenet4@trintignant.hjp.at>
<ZjdCdg94EQs3zPul@torres.zugschlus.de>
<slrnv3eocq.16cpt.hjp-usenet4@trintignant.hjp.at>
<Zj3rZAstdShbMuSt@torres.zugschlus.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Injection-Info: vinge.luga.at; posting-host="212.17.106.130";
logging-data="25330"; mail-complaints-to="usenet@vinge.luga.at"
User-Agent: slrn/1.0.3 (Linux)
Cancel-Lock: sha1:Z6vNsEZBKO0Rqo4BJNVAYB5FT0I=
View all headers

On 2024-05-10 09:39, Marc Haber <mh+python-de@zugschlus.de> wrote:
> On Sun, May 05, 2024 at 12:38:18PM +0200, Peter J. Holzer wrote:
>> Ah, dachte ich mir, dass da eine wichtige Information fehlt ;-).
>
> Welche?

Die Information, dass Du das gleiche Python-File einmal mittels import
und einmal als Script ausführst.

Das sind unterschiedliche Mechanismen.

> Dass ich den Empfehlungen des Python Tutorials, Kapitel 6.1.1
> "Executing modules as scripts" gefolgt bin? War das falsch?

Das funktioniert in einigen einfachen Fällen (insbesondere, wenn das
Modul keine weiteren Imports (außer Standard-Modulen) hat oder wenn die
alle direkt im Suchpfad liegen. Wenn man das mit einem Submodul eines
Packages probiert, muss man sich das Environment entsprechend herrichten
(z.B. indem man $PYTHONPATH passend setzt). Keine große Hexerei, wenn
man es weiß, aber selbst dann vergisst man gerne darauf (ich zumindest).
Ich würde daher davon abraten.

hp

Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
From: Hermann Riemann
Newsgroups: de.comp.lang.python
Date: Fri, 10 May 2024 18:05 UTC
References: 1
Path: i2pn2.org!rocksolid2!news.neodome.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: nospam...@hermann-riemann.de (Hermann Riemann)
Newsgroups: de.comp.lang.python
Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
Date: Fri, 10 May 2024 20:05:56 +0200
Lines: 22
Message-ID: <la7604FdslU1@mid.individual.net>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: individual.net 3/oVTjreuDP7L09INXFabQhWw4hFMrWOX51wvv0NGZhFABnKsX
Cancel-Lock: sha1:VG09adO3YrIpxpnVibm3FxcrEaE= sha256:JvzcwbDYODcV1mbPY6CepyHORlp+bHi9tJNSvaWps3o=
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Thunderbird/68.2.1
In-Reply-To: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
Content-Language: de-DE
View all headers

Am 04.05.24 um 13:12 schrieb Marc Haber:

> ich hab mal eine Verständnisfrage.
>
> Gegeben sei ein Verzeichnis . und ein Programm ./keks.
> Weiterhin sei die Klasse MyClass1 in d/mc1.py und die Klasse MyClass2 in
> d/mc2.py definierrt.
>
> Wenn ich nun in keks die Klasse MyClass2 benutzen möchte, schreibe ich
> "from d.mc2 import MyClass2". Wenn ich in d/mc1.py dasselbe tun möchte,
> muss ich dort "from mc2 import MyClass2" schreiben, kann also Code, der
> "verwandte" Module benutzt, nicht frei verschieben.
>
> Ist das so gedacht, oder verpass ich da was?

Ein wenig lässt sich mit sys.path.append erreichen.

Ich benutze das für meine Hilfsprogramme,
die von mehreren Programme verwendet werden.

--
<http://www.hermann-riemann.de>

Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
From: Stefan Ram
Newsgroups: de.comp.lang.python
Organization: Stefan Ram
Date: Sat, 11 May 2024 12:13 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram...@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: de.comp.lang.python
Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
Date: 11 May 2024 12:13:39 GMT
Organization: Stefan Ram
Lines: 72
Expires: 1 Feb 2025 11:59:58 GMT
Message-ID: <Verzeichnisse-20240511131000@ram.dialup.fu-berlin.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de> <la7604FdslU1@mid.individual.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de VAXDguXfOTnkSWVNkVcffwkoKU9D0mpnTysxh9d6YbZsH4
Cancel-Lock: sha1:UwpRBqyZhEvV3VfPsY4x7jq/MRg= sha256:aA9FchjQso9KrN5okI8OajDmx93PHvKwmZ2hrKXLf1I=
X-Copyright: (C) Copyright 2024 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: de-DE-1901
View all headers

Hermann Riemann <nospam.ng@hermann-riemann.de> schrieb oder zitierte:
>Ein wenig lässt sich mit sys.path.append erreichen.

Es ist pythonisch, Module nicht weiter in "Pakete"
(Unterverzeichnisse) zu untergliedern. Siehe den Vortrag
"Beyond PEP 8" von Raymond Hettinger, bei zirka 45 %,
wo er "from nettools import NetworkElement" einführt.

Falls man ein Modul hat, das nur zu einem Projekt gehört, befindet
es sich daher normalerweise im Verzeichnis eben jenes Projektes.

Falls man unbedingt wie in

main.py
p/m0.py
p/m1.py

mit einem Unterverzeichnis p arbeiten will:

Um in m1.py ein Modul m0 aus demselben Verzeichnis
zu importieren, kann man einen /relativen/ oder
/absoluten Import/ in m1.py verwenden:

m1.py

from .m0 import C # oder:
from p.m0 import C

verwenden, falls man p.m1 von main.py importiert.

(Dann könnte es unter manchen Umgebungen vielleicht nötig sein,
eine leere p/__init__.py anzulegen? Hier aber nicht.)

(Ein direktes "import m0" in m1.py würde hingegen nur bei einer
direkten Ausführung von m1.py als Skript gehen, nicht bei Import
aus "main.py".)

Wie Du schon schriebst, könnte man schließlich auch noch den
Systempfad manipulieren. Etwa in m1.py:

m1.py

import sys
import os

parent_dir = \
os.path.dirname( os.path.dirname( os.path.abspath( __file__ )))
sys.path.append( parent_dir )

from p.m0 import C

. Jetzt sieht m1.py die Situation aus der Sicht seines
Oberverzeichnisses und kann daher nun m0.py als "p.m0" ansprechen,
egal, ob es als Skript gestartet oder aus main.py importiert wird.

Fall ein Modul in mehreren Projekten verwendet werden soll,
und man es für sich selber verwenden will, empfiehlt sich die
"editierbare" Installation mit "-e":

cd Projectdir
python -m pip install -e .

. Nun sind alle Module aus Projectdir überall direkt mit "import"
verfügbar.

Falls ein Modul in mehreren Projekten verwendet werden soll,
und man es für andere zugänglich machen will, dann empfiehlt
sich die Herstellung einer Distribution mit "python setup.py".

NB: In Python 3.12 wurden die "setuptools" entfernt und die
Programmierer müssen sie daher jetzt selbst über "pip install
setuptools" installieren.

Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
From: Stefan Ram
Newsgroups: de.comp.lang.python
Organization: Stefan Ram
Date: Sat, 11 May 2024 13:05 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram...@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: de.comp.lang.python
Subject: Re: [Python-de] Pfade, Modulnamen und import-Statements
Date: 11 May 2024 13:05:11 GMT
Organization: Stefan Ram
Lines: 7
Expires: 1 Feb 2025 11:59:58 GMT
Message-ID: <distutils-20240511140456@ram.dialup.fu-berlin.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de> <la7604FdslU1@mid.individual.net> <Verzeichnisse-20240511131000@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de hcodAwIQTj0MPiBBc9Zs3gIwY46cShfpNJr57DLS2ylS0C
Cancel-Lock: sha1:DgpQs2SeKg6PrUcfPZP0XHhBEfU= sha256:FgqKhzEKIkAB4gsefY6BybhjFBlrk8JktZaDMEDcDjw=
X-Copyright: (C) Copyright 2024 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: de-DE-1901
View all headers

ram@zedat.fu-berlin.de (Stefan Ram) schrieb oder zitierte:
>NB: In Python 3.12 wurden die "setuptools" entfernt und die
>Programmierer müssen sie daher jetzt selbst über "pip install
>setuptools" installieren.

ODER ich habe "setuptools" mit "distutils" verwechselt, und
"setuptools" wurden in Python 3.12 nicht entfernt.

Subject: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Christopher Arndt
Newsgroups: de.comp.lang.python
Date: Sat, 11 May 2024 13:18 UTC
References: 1 2 3 4
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: chr...@chrisarndt.de (Christopher Arndt)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Re:_Pfade,_Modulnamen_und_import-Statements
Date: Sat, 11 May 2024 15:18:31 +0200
Lines: 22
Message-ID: <da75dfec-7c23-4093-af02-a7d1b41cd2bf@chrisarndt.de>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<la7604FdslU1@mid.individual.net>
<Verzeichnisse-20240511131000@ram.dialup.fu-berlin.de>
<distutils-20240511140456@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de hZfjYBJxTIKpgXRvzMcpcgNMoYVjAS8okTmVH5RI7ADQ==
Cancel-Lock: sha1:cJh9nwwrRyliB9wARwGAJ+2SVwY= sha256:93F5bdJiN2Vopy+1GMesVqthJ7CGJgiPu9X2VmDapjE=
Authentication-Results: mail.python.org; dkim=pass
reason="2048-bit key; unprotected key"
header.d=chrisarndt.de header.i=@chrisarndt.de header.b=EfzKO0Mo;
dkim-adsp=pass; dkim-atps=neutral
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chrisarndt.de;
s=dkim; t=1715433512;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references:autocrypt:autocrypt;
bh=Pr3d0Q66AJ1c6NXFECI8nTHJDM4+2wXA/4FcQXLiLNg=;
b=EfzKO0MoI+nTorUT1MoyZH0C/ldbn02j7xi8SWt+Yht1SRqgbxPNDjUPDX3GM8zFY1pVJs
CXow9mdblOSRLibx2Pdau9Qg0T+B4dBgxl1a3HsejDb0kxoLHnmfPhtCWaZOYe/99XUWpd
otYDOxx6uHnp/2+hzTDAGqfBKM/V1/d+xcVNUVkqZQyiSUINWWvydt0z8It7+kXVKfJOUV
3/4Bg0fj/P8Ux7lljjtUAGSHLGKO7l0Ptli7uUi8RCVdwgMwBZFy5r0ZCp+mpHrgVZC4Rk
asZFZwz+er8qCDWLRFXaccvXfrZnrL3eJ+1NhvtG78N8FuBJj8P+vVdI64ECPA==
Authentication-Results: mx1.0x20.eu;
auth=pass smtp.mailfrom=chris@chrisarndt.de
Content-Language: en-US, de-DE
Autocrypt: addr=chris@chrisarndt.de; keydata=
xsFNBE2t0uMBEACoTVs27gz52K3m9eyTycZjx9yzYRdQzmxec3By9TOOXIWlwO4Fnd4KJ7V+
6myv7/1nOGu7q08BXb32myUxeoOut7QwGvV5GGQfiqUOGmJ6/La/ypH+Fci6Sw83hcZttBg9
tk349/+XJbkies+TQZq3qstK2RWSA6xmXuRrQqV46QYoN74lKAAe3gkkxzR7Em257aOruNpG
JIBhRLyZz1Yc+KuUhOmnnLvjySW/xnWQ00JIgtRzsmgXYmzSbyrrz/EDhpL+fViCkfX4ZSyo
4rewkVlJtsRxA3mEK+Twv6wOFbfcTt2wrvBkwIzKYJrrYhK4AXirpeHuLzZj7kHj08C6Oyd+
073YCB6AHA84HiABAiouCfJ7sKqo5pkBp+pnmMrc3q2cYo6junwlQy/3z7SPaQDLF8omANNq
IdUP05pmnKDRjqYDVvGmDUl+Im2KiN6OLVKhHvFwWlnLtFU3IgcJEC3If1f7AmfdBqgGiS4g
2XmObv/+fu7Q6oG1BgBUgvRsLbMowTp7jsghby6CUqsnM5tKdHSDeE7tsA9ttyqsGcp7Vm3c
GzzzVwatJKqvYncaiLNIjmqJsM6pyGSESbZ078Xy9kLfkZDcUlJwiTgT8n33mGV2svUxCJFd
VpT/rKBZo82uZrmHxnH7BrP30BWcNoOieTBTak+5r2xgqJidhQARAQABzTBDaHJpc3RvcGhl
ciBBcm5kdCAoUHJpdmF0KSA8Y2hyaXNAY2hyaXNhcm5kdC5kZT7CwZgEEwEIAEICGwMGCwkI
BwMCBhUIAgkKCwQWAgMBAh4BAheAAhkBFiEE8LoeroZlGYnAocmQHg2XszpOHzEFAmF1TrYF
CR0tfVMACgkQHg2XszpOHzGj/A/+NSQ0riQ0fK7BcOdb7RDzhhJrlrCtPdaT+wNM5kMFm/0L
T4ZjiUp3BlyjSLTJJN1DCFN9nfo7q6y0+IbzRHzrxf2BY001JvCJzggjckxm+y2ENeX4W7tq
scIGhMt/e6hCtVD88a2BT0FTWl2hr1TTja60cIvH6qFshXSWtDZpS8mOLPlHPkqtCTYlwuV5
1l4Q/w6M7CnNfrzmsZe4ZcGgXyi1m5KTtT0BADLlkHznXuBpCfFd/BFLN6wVqWGOsuIpNulR
dUvEm1v0pLZpX4D7cIvcdd1qKd+RFpJf1mDKCi96u1hwSJfHGUfGW5qxsk2PE/mvdulQj7fh
GBaU789NosO0pVO+ATSKEpHxKrb0ktaFYvGKJ0o0s0RY0qfqRW+hi2Ff313XsPI+nTBK75io
GU3/QuxrT8jkujxq/x9FsqIdtspySiXdHHhpWtUEuQhfiPF0TdfLlfgMlpfJO5Y80ekX/hdO
iUn0KDm4KdM63fPcXKG1W1wMF/9uqvQLqU08nQZqJ/GuP6KcwdcbW8WDK7fibaESkHVRvLN/
+BBhnl1ObjbxRxfHEUl9ixw7ptmVpAJR6JXw3nHSsE5cQMBOpY/FSjvdnXclp3OvOyvuK5ej
MDPkxLfxXdLXXeUNzO5esCHCPALUQHoreSJbyYd7gAniAtTQtTe8PuLvDCNRYGjOwU0ETa3S
4wEQANd0rivLkvSiRgaByqrtSnaSHeNU34jf3P+aHWDunMQPkhmzQcfr3XmiTgJ8kzxXOcvX
HusLkpHgrfsI14rOANUICFtAp53HVh/CSW3qUvW/H8xF3QN1Y6AadUGHsLcKavBATkGtUpIu
C0aEkinkf/7gK9RfcTLnJFML1J1tGn1XAC/rxavpKpHeu0DsCpo+apkEmY+3x76jTRnBlGFJ
53ti5BDjIA/qXWYuruNZZe5KZsVSOXSJ7lnp8HOal4mtTD2GUW8dzmDkRSbJu+Es6SWirw+m
U/ng50WNUdG4vNAXVHHi2ng/Ksa7O/nTEv9ES6ycSDkPBp83Q5HXdchBHnDbIUz8J604TgxA
OTFCa2wvTwp3Fo81BAMxHxjEUu58Ql7sSnWzEDoCunpMnpplNyB94bYVUF1IHJyIgsd2X1Ze
BdRsx3VJMQKq+TZR9futy3LRJtkVsOllQw0lpKBJw5YLUhM5iXbQrKhlYAZvGJTAY3yLNkR0
LKxt2me2W2wuq215j4nCOlcrRs+sFWCwe1IN0c32FN1OqFQCS0wnGl/ybU/c5lkPz17JA+d2
pCYDvF4Q2NWgcZhboqfqHqVw/6ii9zBmBRiLH035wdhCUBzdFVcyir0dHkTmql0AnM3o4Iv3
NJHORoPD2u/OkHy/cQoomcwpZj2EMMPEXeONlPNdABEBAAHCwXwEGAEIACYCGwwWIQTwuh6u
hmUZicChyZAeDZezOk4fMQUCYXVO0AUJHS19bQAKCRAeDZezOk4fMW7jD/9rIUybCoUskiEw
o4TuEVNrBh3PkRMMrVlo6AicxQmGN10ztokyWkuttCe19mWy/omo1g3/8SdzhplK00Rq2cSp
DcWqktlQtx9S0aUlBKhMTCSVULN7vC858zFeW/lH8Z3aGk4PaloJ0UBgNXg9dVD9CsW2FFKr
v13VCeSjMz/wq85DyItyB4ye7TVPdcLssv0J4rQdsJFkHKf8Q/cQXnqtUPNmEaBLIqZIW6VV
oGfrioU0m5S/LnN8xqViiWkFlIfkf1SXf7BRolCh2R107KGQ/tqBHp5qdCrdNIQnsUitg2PW
QFz0hHz9KRSG6htsYr80jAWksLxPaYtyKQfm4Xibg15Qo2ImRlbxRrFg5gC0IQKiI7gXHGy8
CwQCL8+6rmm5MQuC+KpANKzXsZJWPFYch19bfhAkDlpg2SnQeEJxdfPJKB/quhKLk2ihtxVU
SIT+bSZVwFfht226ll1RveAH8cuFEPwttL6peJ3rwVAzHXnxA75IVJSOWV2DhZHQmbA8k8zb
lU738zjDG9Xv8grY2yogg1JfB62qSAdMpzu/QkJdGX3qttt3BDhUItMdpEAlGN6QXoBc9GVu
30bZyMiMDhR32a2mG9C/csi0kbo0FgXQcgc7dANKvgKfexufaEtxiR+6Dh2QCrBtibU7t87F
ebHcBV9tqDnojW2Ku0B4Uw==
In-Reply-To: <distutils-20240511140456@ram.dialup.fu-berlin.de>
X-Spamd-Bar: /
Message-ID-Hash: JVXS4WTZVPXJ4YM4THM3L2FXQP2BJYIR
X-Message-ID-Hash: JVXS4WTZVPXJ4YM4THM3L2FXQP2BJYIR
X-MailFrom: chris@chrisarndt.de
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-python-de.python.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/JVXS4WTZVPXJ4YM4THM3L2FXQP2BJYIR/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

Am 11.05.24 um 15:05 schrieb Stefan Ram:> ODER ich habe "setuptools"
mit "distutils" verwechselt, und
> "setuptools" wurden in Python 3.12 nicht entfernt.

distutils wurde in 31.2 aus der stdlib entfernt.

setuptools war noch nie Teil der stdlib, wurde aber standardmäßig von
venv in neue virtuelle Environments installiert. Das ist jetzt nicht
mehr so.

Wenn man weiter distutils oder setuptools und eine setup.py verwenden
will, sollte man daher eine pyproject.toml anlegen und eine
entsprechende [build-system] Sektion einfügen, die dafür sorgt, dass
beim Bauen eines Pakets setuptools heruntergeladen wird setuptools hat
dann seine eigene Version von distutils.

Siehe:

https://packaging.python.org/en/latest/tutorials/packaging-projects/#choosing-a-build-backend

Chris

Subject: [Python-de] Re: Pfade, Modulnamen und import-Statements
From: Hartmut Goebel
Newsgroups: de.comp.lang.python
Organization: crazy-compilers.com
Date: Sat, 11 May 2024 15:49 UTC
References: 1 2 3 4 5
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: h.goe...@crazy-compilers.com (Hartmut Goebel)
Newsgroups: de.comp.lang.python
Subject: [Python-de]_Re:_Pfade,_Modulnamen_und_import-Statements
Date: Sat, 11 May 2024 17:49:31 +0200
Organization: crazy-compilers.com
Lines: 17
Message-ID: <f1a959a6-c758-45d5-ac28-7484813106a2@crazy-compilers.com>
References: <ZjYYBgoIiqLkxkB3@torres.zugschlus.de>
<a1b0c3e8-9e07-4cde-9b19-2bc800d51db0@crazy-compilers.com>
<ZjdBpXoZUmsZAWaG@torres.zugschlus.de>
<slrnv3eo1s.mt.usenet@mobilewave.waldi.eu.org>
<Zj3q0Y19HfBbszdv@torres.zugschlus.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64
X-Trace: news.uni-berlin.de a0X/vr2NCdRXzybkQcVuOAsdBgV+cW6TGBh8+CMeaXoA==
Cancel-Lock: sha1:ZW8gjkW9B90XyCHjoV8UUeEcRUk= sha256:G6H/1Tn17a7FcSQUnvvGrorB5pt1XI3DIAWRxgdTMN4=
Authentication-Results: mail.python.org; dkim=none reason="no signature";
dkim-adsp=none (unprotected policy); dkim-atps=neutral
User-Agent: Mozilla Thunderbird
Content-Language: de-DE, en-US
Autocrypt: addr=h.goebel@crazy-compilers.com; keydata=
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
OY6DWb43/DE=
In-Reply-To: <Zj3q0Y19HfBbszdv@torres.zugschlus.de>
X-Noris-IP: 79.211.177.200
Message-ID-Hash: YOFAYQZIY7MO5OH4Q275FKQPUKQCWXLF
X-Message-ID-Hash: YOFAYQZIY7MO5OH4Q275FKQPUKQCWXLF
X-MailFrom: h.goebel@crazy-compilers.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-python-de.python.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Content-Filtered-By: Mailman/MimeDel 3.3.10b1
X-Mailman-Version: 3.3.10b1
Precedence: list
List-Id: Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At: <https://mail.python.org/archives/list/python-de@python.org/message/YOFAYQZIY7MO5OH4Q275FKQPUKQCWXLF/>
List-Archive: <https://mail.python.org/archives/list/python-de@python.org/>
List-Help: <mailto:python-de-request@python.org?subject=help>
List-Owner: <mailto:python-de-owner@python.org>
List-Post: <mailto:python-de@python.org>
List-Subscribe: <mailto:python-de-join@python.org>
List-Unsubscribe: <mailto:python-de-leave@python.org>
View all headers

Am 10.05.24 um 11:37 schrieb Marc Haber:
>> Dafür gibt es "pip install -e ." z.B. Damit macht man das aktuelle
>> Projekt im globalen Suchpfad des benutzten Interpreters verfügbar.
> Aber hoffentlich nur im Environment einer Subshell? Oder ist das
> persistentes Herumfummeln im System? Wenn ja, wo?
pip install installiert per default nach
/usr/lib/pythonX.YZ/site-packages. Debian lässt das aber gar nicht mehr zu.
Wenn ein virtual environment aktiv ist, wird nach
<venv>/lib/pythonX.YZ/site-packages installliert. Dito bei nicht-aktivem
vend und "<venv>/bin/pip install".
Option --user installiert nach $HOME/.local/lib/pythonX.YZ/site-packages.
pip list zeigt Dir, was wo installiert ist. (Bei aktivem venv aber im
venv und nicht im System.)
--
Regards
Hartmut Goebel
| Hartmut Goebel |h.goebel@crazy-compilers.com |
|www.crazy-compilers.com | compilers which you thought are impossible |


rocksolid / de.comp.lang.python / Re: [Python-de] Pfade, Modulnamen und import-Statements

1
server_pubkey.txt

rocksolid light 0.9.136
clearnet tor