Numpy: BUG: nicht numerische kernel_version auf der OVH-Plattform

Erstellt am 24. Juni 2020  ·  5Kommentare  ·  Quelle: numpy/numpy

Hallo, es gibt einen Fehler im Code von __ini__.py (Python3.8), wenn die Version des Kernels erkannt wird.
Ich habe die Lösung gefunden, aber ich beschreibe das Problem hier, um anderen Benutzern zu helfen.

    # We usually use madvise hugepages support, but on some old kernels it
    # is slow and thus better avoided.
    # Specifically kernel version 4.6 had a bug fix which probably fixed this:
    # https://github.com/torvalds/linux/commit/7cf91a98e607c2f935dbcc177d70011e95b8faff
    import os
    use_hugepage = os.environ.get("NUMPY_MADVISE_HUGEPAGE", None)
    if sys.platform == "linux" and use_hugepage is None:
        use_hugepage = 1
        kernel_version = os.uname().release.split(".")[:2]
        kernel_version = tuple(int(v) for v in kernel_version)
        if kernel_version < (4, 6):
            use_hugepage = 0
    elif use_hugepage is None:
        # This is not Linux, so it should not matter, just enable anyway
        use_hugepage = 1
    else:
        use_hugepage = int(use_hugepage)

    # Note that this will currently only make a difference on Linux
    core.multiarray._set_madvise_hugepage(use_hugepage)

Fehlermeldung:

# usr\local\lib\python3.8\site-packages\numpy\__init__.py

 #python3.8 test.py
['4', '19-ovh-xxxx-std-ipv6-64']
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    kernel_version = tuple(int(v) for v in kernel_version)
  File "test.py", line 4, in <genexpr>
    kernel_version = tuple(int(v) for v in kernel_version)
ValueError: invalid literal for int() with base 10: '19-ovh-xxxx-std-ipv6-64'

Informationen zur Numpy / Python-Version:

Um diesen Fehler zu beheben, ist hier die Lösung:

python kernel_version = tuple(int(v[0:2]) for v in kernel_version)

Die int (v [0: 2] ) kürzen die Zeichenfolge, um die INT korrekt wiederherzustellen.

00 - Bug high

Alle 5 Kommentare

Hallo,

Ich habe das gleiche Problem mit dem mit OVH gelieferten Kernel.
Ich sehe, dass Sie die Pull-Anfrage stellen. Vielen Dank !

Hmmm, mein Fehler, warum habe ich hier keine Looseversion verwendet?

Oh, wenn ich noch einmal hinschaue (es tut mir leid, dass ich heute ein bisschen mehr Dinge vermisse), das ist eine seltsame Versionszeichenfolge, die die Mikroveröffentlichung fallen lässt. Aber es scheint, dass LooseVersion richtig damit umgeht, also denke ich, dass wir das hier einfach verwenden können. Obwohl ich denke, dass das Importieren von Distutils langsam sein kann, fügen Sie vielleicht einfach ein try:/except: nicht sehr wichtig.

Ich konnte die Pull-Anfrage nicht finden, @ nejib1 arbeitest du gerade daran

@ anirudh2290 Es gibt keine PR, könntest du eine machen? Es scheint zwei Korrekturen zu geben, eine im Bericht und die Verwendung von LooseVersion @seberg .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen