Versions-wirwar

lockdoc

Well-Known Member
Ich bin immer ziehmlich verwirrt, wenn es um manche Version bei den Ports geht.

Code:
/usr/ports/lang/

python/                       python24/
python-doc-html/              python25/
python-doc-pdf-a4/            python26/
python-doc-pdf-letter/        python27/
python-doc-postscript-a4/     python31/
python-doc-postscript-letter/ python32/

Derzeit ist meine Python Version 2.6.6 und meine ganzen Python Module entsprechend py26-*


Code:
pkg_version -v | grep "<"
...
py26-bsddb-2.6.5_2                  <   needs updating (port has 2.6.6_2)
py26-cairo-1.8.8_1                  <   needs updating (port has 1.8.10)
py26-dbus-0.83.1_1                  <   needs updating (port has 0.83.2)
py26-gimp-app-2.6.8_1               <   needs updating (port has 2.6.11)
py26-libxml2-2.7.7                  <   needs updating (port has 2.7.8_1)
py26-pysqlite-2.3.5                 <   needs updating (port has 2.3.5_1)
py26-sqlite3-2.6.5_1                <   needs updating (port has 2.6.6_1)
py26-tkinter-2.6.5_3                <   needs updating (port has 2.6.6_3)
py26-vte-0.24.3                     <   needs updating (port has 0.26.2)
...
Warum dann sagt er mir nicht, dass er python (wie oben im /usr/ports/lang/ zu erkennen ist, ist python32 die neueste Version) updaten will. Er laesst es auf 2.6.

Ich frage mich warum hier nicht auf die neueste Version upgedatet wird?

Wofuer sind denn bitte die python27, 31 und 32 Versionen?


Das selbe gilt fuer ruby18, die will er auch nicht automatisch auf die 19er Version updaten.

Gibt es denn fuer manche Ports immer bestimmte Versionen, die einfach genutzt werden muessen?

LG
 
DEFAULT ist 2.7 aber er bleibt bei der installierten Version, wenn schon eine da ist. Die meisten Python-Programme laufen nicht mit dem 3er Zweig.

Die ganzen Ports sind da, weil du mehrere Python-Versionen nebeneinander installieren kannst.
 
Danke.

Also ich hab mir dann mal gedacht, dass ich die 2.6er entfernen werde und die 2.7er dann installiere.

Sollte ich das tun werden dann Probleme aufkommen? Und wie kann ich diese beheben? Oder ist das ganze eine unkluge Idee?

Ich wuerd halt ungerne mehrere Versionen nebeneinander laufen haben, da ich mein System ein wenig ausmissten moechte.
 
Mach's lieber so:

# portmaster -o lang/python27 lang/python26
Danach
# portmaster py26\*

Danach noch die Reste:
# find /usr/local/lib/python2.6/ -type f -exec pkg_info -qW \{} \; | awk '!prev[$0]; {prev[$0]=1}' | xargs -o portmaster

In der tcsh:
# find /usr/local/lib/python2.6/ -type f -exec pkg_info -qW \{} \; | awk '\!prev[$0]; {prev[$0]=1}' | xargs -o portmaster
 
vielen Dank!

Sachmal, schreibst du die Befehle eigentlich immer realtime ausm Kopf oder musst du ab und zu mal ine manpage kucken?
 
Natürlich muss ich gelegentlich in die Manpage schauen. Aber nicht mehr für solche Kleinigkeiten.

Find, grep, sed und awk beherrsche ich ziemlich gut.
 
Na ich glaub, das wäre für Kamikaze als glaub Programmierer und auch soweit ich weiß Maintainer ein Armutszeugnis, wenn er mit solchen Sachen nicht klar käme.
 
Danke.

Also ich hab mir dann mal gedacht, dass ich die 2.6er entfernen werde und die 2.7er dann installiere.

Sollte ich das tun werden dann Probleme aufkommen? Und wie kann ich diese beheben? Oder ist das ganze eine unkluge Idee?

Ich wuerd halt ungerne mehrere Versionen nebeneinander laufen haben, da ich mein System ein wenig ausmissten moechte.


/usr/ports/UPDATING Eintrag: 20110304
... nach dem update

if using portupgrade:
# cd /usr/ports/lang/python && make upgrade-site-packages

If using portmaster:
# cd /usr/ports/lang/python && make upgrade-site-packages -DUSE_PORTMASTER

Klappte bisher immer (bei mir).
 
Mach's lieber so:
# find /usr/local/lib/python2.6/ -type f -exec pkg_info -qW \{} \; | awk '!prev[$0]; {prev[$0]=1}' | xargs -o portmaster
Also ich find ja den Befehl sehr huebsch und wuerde ihn gerne exakt verstehen. Bitte korrigiert mich falls ich was falsch interpretiere


find
Code:
> find /usr/local/lib/python2.6/ -type f
Finde alle "files" in /usr/local/lib/pythin 2.6

Code:
- exec <program> {} ;
Hier wird <program> aufgerufen mit {} als parameter, welches durch find gefunden wurde.
Es muss durch ein ; terminiert werden.

Also im klartext fuer: Wende auf alle gefundenen Files den pkg_info Befehl an.
Sind die zwei \ erforderlich?

awk
Code:
awk '!prev[$0]; {prev[$0]=1}'
Das ist jetzt leider ein bissel zu komplex. Koennte da jemand ein zwei Worte zu sagen bitte.


xargs
Code:
xargs -o portmaster
Verhaelt sich das xargs so wie das -exec in find?
 
Auf die Gefahr hin, daß ds hier irgendwie unmodern ist, aber dafür
ganz und gar unkomplex:
lies /usr/ports/UPDATING

suche python ; oder noch genauer : 20110304

das mach genau das, was du suchst. (das oben auch).

Keep it simple, buddy ;)
 
Bitte korrigiert mich falls ich was falsch interpretiere ...

Code:
- exec <program> {} ;
Hier wird <program> aufgerufen mit {} als parameter, welches durch find gefunden wurde.
Es muss durch ein ; terminiert werden.

Also im klartext fuer: Wende auf alle gefundenen Files den pkg_info Befehl an.
Sind die zwei \ erforderlich?
Ja, sind sie. Sowohl { als auch ; werden sonst von der Shell interpretiert. Aber sie sollen an den Find Befehl weitergegeben werden.

awk
Code:
awk '!prev[$0]; {prev[$0]=1}'
Das ist jetzt leider ein bissel zu komplex. Koennte da jemand ein zwei Worte zu sagen bitte.
In awk setzt man Code Blöcke, die für jede Zeile ausgeführt werden in Spitze klammern. Optional kann man denen Bedingungen vorsetzen.

Das !prev[$0] ist eine solche Bedingung, sie ist true, wenn die aktuelle Zeile $0 nicht als schlüssel eines Arrays prev existiert. Den Code-Block habe ich weggelassen, dann passiert die Standardaktion Zeile ausgeben. Die nächste Aktion passiert unbedingt. Der Codeblock {prev[$0]=1} legt im Array prev einen Wert mit dem schlüssel $0 an.

So wird jeden Zeile nur beim ersten auftauchen ausgegeben, das ganze ist also ein Filter für Duplikate.

xargs
Code:
xargs -o portmaster
Verhaelt sich das xargs so wie das -exec in find?

Xargs liest Zeilen aus der Standardeingabe und übergibt sie dem folgenden Kommando als Parameter. Das -o sorgt dafür dass nach dem Einlesen der Parameter stdin neu initialisiert wird, damit man mit dem aufgerufenen Programm interagieren kann.
 
Zurück
Oben