[Python-de] Globaler "prefix" o.ae.

Ole Streicher ole-usenet-spam at gmx.net
So Sep 11 11:56:35 CEST 2011


Thomas 'PointedEars' Lahn <PointedEars at web.de> writes:
>> from common.config.Profile import profiles
>> from database.ps2.Database import database
>> Sowas lässt sich natürlich nicht so ohne weiteres z.B. in ein
>> Python-Repository einpflegen, weil es mit jedem anderen Paket, welches
>> so frech ist, "common" und "database" zu verwenden, clashen würde.
>
> Unsinn.

Warum? Wenn ich meine Python-Pakete gemäß der Debian Python Policy
installiere, dann liegen sie unter
/usr/lib/python2.X/dist-packages. Wenn man dort nun ein Paket "common"
installiert, dann beißt sich das mit jedem anderen Paket, welches
"common" heißt.

>> Wenn das geschafft ist, besteht das Problem, dass sowohl Userprogramme
>> als auch der Code innerhalb der Pakete sich untereinander mit "common"
>> und "database" referenziert und damit wohl nicht mehr lauffähig
>> wäre.

> Unsinn.  man PYTHONPATH

Ich weiß, dass Du gerne kurz und ein wenig arrogant antwortest.

Aber nun stelle Dir mal vor, ich habe das package als Debian-Paket
packetiert, wobei ich es zusätzlich in ein Unterverzeichnis "mypackage"
verschoben habe. Damit wandert es bei der Installation standardmäßig in
das o.g. Verzeichnis/mypackage.

Jetzt möchte ein Nutzer gerne das package importieren:

import mypackage

oder

from mypackage import common, database

Der Nutzer /weiß/ doch gar nichts über die Interna des packages, woher
sollte er also ahnen, dass er seinen PYTHONPATH anpassen muss? Der
Pythonpath ist ja eben gedacht für die Dinge, die er selber anpassen
will. Und woher soll er wissen, dass auf dem konkreten System
dist-packages/ unter ebenjenem Pfad liegt? Muss jetzt jeder Nutzer seine
PYTHONPATH pflegen, nur um das unter dem Standardpfad installierte
package nutzen zu können?

Sorry, aber das hört sich nicht nutzerfreundlich an. Ich würde es eher
als "Unsinn" bezeichnen.

>> Normalerweise wäre das ja ein
>> from mypackage import *
>> aber wohin kommt das, damit ich es nicht in jede Datei einzeln packen
>> muss?

> Nirgendwohin.
>
> RTFM: <http://docs.python.org/release/3.2.2/reference/simple_stmts.html#the-
> import-statement>

| If the list of identifiers is replaced by a star ('*'), all public
| names defined in the module are bound in the local namespace of the
| import statement.

Und was willst Du mir jetzt damit sagen?

Ole


Mehr Informationen über die Mailingliste python-de