Installation Python 3.11

Probleme bei der Installation?
Antworten
alex1028
User
Beiträge: 4
Registriert: Sonntag 27. November 2022, 12:44

Hallo zusammen,

ich habe Python 3.11 auf open SuSE 15.2 installiert.
Jedoch kann ich diese Version nicht in PyCharm einbinden, weil kein "virtual environment" erstellt werden kann.
Außerdem kann auch tkinter nicht genutzt werden:

Python 3.11.0 (main, Nov 27 2022, 12:13:15) [GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.11/tkinter/__init__.py", line 38, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_tkinter'


Was habe ich falsch gemacht?

Gruß
Alex
__deets__
User
Beiträge: 14525
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du sagst nicht wie genau du das installiert hast. Hast du das selbst gebaut, oder mit dem Suse Paketmanager installiert? Wenn ersteres, dann fehlten beim bauen die Abhaengigkeiten (in Debian dev-Pakete) fuer tcl/tk. Wenn zweiteres, dann fehlen die entsprechenden Python-Pakete (zB python3-tkinter in Debian, wie auch immer in Suse).
__deets__
User
Beiträge: 14525
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nachtrag: Python 3.11 ist *sehr* cutting edge. Das ist fuer Python selbst, und alles was es mitbringt, kein Problem. Aber wenn es Richtung 3rd-Party-Pakete geht, wirst du in viele Probleme laufen, weil die noch nicht vorbereitet vorliegen. Und dann deutlich mehr Arbeit in deren Erstellung gesteckt werden muss. Wenn es keinen Grund dafuer gibt, benutz 3.10.
alex1028
User
Beiträge: 4
Registriert: Sonntag 27. November 2022, 12:44

Hallo deets:

vielen Dank für Deine Antwort.

Für SuSE 15.2 gibt es leider kein aktuelles Python-Paket, habe ich die python-Sourcen als auch Tk direkt heuntergeladen.

Folgende Schritte habe ich vorgenommen:
export TCLTK_CFLAGS=-I/opt/ActiveTcl-8.6/include
export TCLTK_LIBS='/opt/ActiveTcl-8.6/lib/libtcl8.6.so /opt/ActiveTcl-8.6/lib/libtk8.6.so'
./configure --prefix=/usr --enable-optimizations
make
make install prefix=/usr


configure meldet, dass tkinter vorhanden ist:
checking for stdlib extension module _tkinter... yes

Es geht mit bei Python 3.11 eigentlich nur um die erweiterten mathematischen Funktionen wie. z.B. cbrt, ansonsten geht ja mit der vorinstallierten Version 3.6.12 alles
Kann ich evtl. die mathematischen Funktionen aus 3.11 in 3.6.12 importieren?

Gruß
Alex
__deets__
User
Beiträge: 14525
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst nichts aus Python 3.11 in 3.6 importieren. Du kannst hoffen, dass diese neuen Funktionen eigentlich von woanders kommen, und irgendwann in der Standardbibliothek gelandet sind. Das war zB bei subprocess so. Das konnte man dann vorher separat installieren, oder ab Python 2.6 oder so benutzen.

cbrt ist wahrscheinlich genauso gut aus numpy, oder nicht? Dann benutz doch das.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Nur wegen zweier mathematischer Funktionen, die man ohne weiteres über 2**x und math.copysign(abs(x)**(1/3), x) nachbilden kann, lohnt sich Python3.11 nicht.
Das sind nicht einmal Funktionen, die mit int`s funktionieren, sondern nur mit floats. Das Argument, dass die Funktionen auch im C-Standard existieren, ist für mich etwas lau, das trifft aber auch auf fabs, fmod, fsum, etc. zu.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Hier noch der Code für die Integer Variante der dritten Wurzel:

Code: Alles auswählen

def icbrt(x):
    xa = abs(x)
    y = 0
    for s in reversed(range(0, xa.bit_length(), 3)):
        y += y
        b = 3 * y * (y + 1) + 1
        if (xa >> s) >= b:
            xa -= b << s
            y += 1
    return -y if x < 0 else y
alex1028
User
Beiträge: 4
Registriert: Sonntag 27. November 2022, 12:44

Hallo zusammen,

danke für Eure Hilfe.

Numpy funktioniert mit Python 3.6, es tut genau das was Math in 3.11 tut.

Beide sind leider nicht sehr genau :

Python 3.11.0 (main, Nov 27 2022, 10:21:53) [GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.cbrt(27)
3.0000000000000004

Python 3.6.12 (default, Dec 02 2020, 09:44:23) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.cbrt(27)
3.0000000000000004


Gruß
Alex
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Das hat nichts mit Python zu tun: Manche Fließkommazahlen lassen sich prozessorintern nicht exakt als Binärwerte abbilden. Daher können bei Berechnungen mit Fließkommazahlen stets Rundungsfehler auftreten.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

als weitere Erklärung kannst du dir mal folgenden Link anschauen:
https://floating-point-gui.de/

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
alex1028
User
Beiträge: 4
Registriert: Sonntag 27. November 2022, 12:44

Python 3.6.12 (default, Dec 02 2020, 09:44:23) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.cbrt(numpy.float128(27))
3.0


funktioniert.

Danke
Gruß
Alex
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Hm Hier steht, dass 'float128' jetzt die Zahl ordentlich gerundet ausgibt. Dann ist das nichts anderes wie

Code: Alles auswählen

round(3.0000000000000004, 1)
?

Also die Ausgabe meinte ich. 'float128' ist ein 128-Bit Gleitkomma-Zahlentyp mit erweiterter Genauigkeit, hier abschrieben

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13076
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Dennis89: Das war irgendein Problem mit der Ausgabe auf PPC-Systemen. Die Frage ist ob das letztlich nicht nur ein eingebildetes Problem ist, denn bei 0,0000000000000004 von „leider nicht sehr genau“ zu spechen — naja. Das ist bei 64-Bit-Floats die *kleinste* mögliche Abweichung in dieser Grössenordnung wenn ich mich jetzt nicht irre.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Viele haben das Modul mpmath indirekt installiert und wissen es noch nicht einmal, dass sie es haben. Das müsste mit matplotlib mitinstalliert werden. Quelle: https://mpmath.org/

Code: Alles auswählen

In [1]: import mpmath

In [2]: mpmath.mpf("27")
Out[2]: mpf('27.0')

In [3]: mpmath.cbrt(mpmath.mpf("27"))
Out[3]: mpf('3.0')

In [4]: 

sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten