Numpy: BUG: kernel_version não numérico na plataforma OVH

Criado em 24 jun. 2020  ·  5Comentários  ·  Fonte: numpy/numpy

Olá, ocorreu um erro no código do __ini__.py (Python3.8), ao detectar a versão do Kernel.
Encontrei a solução, mas detalho o problema aqui para ajudar outros usuários.

    # 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)

Mensagem de erro:

# 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'

Informações sobre a versão Numpy / Python:

Para corrigir esse erro, aqui está a solução:

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

O int (v [0: 2] ) trunca a string para recuperar o INT corretamente.

00 - Bug high

Todos 5 comentários

Oi,

Estou tendo o mesmo problema com o kernel fornecido com a OVH.
Vejo que você está fazendo o pedido de pull. Obrigado !

Hmmm, erro meu, por que não usei looseversion aqui?

Oh, olhando de novo (desculpe perder as coisas um pouco mais hoje), essa é uma string de versão estranha, descartando o micro-lançamento. Mas, parece que LooseVersion lida com isso corretamente, então acho que podemos apenas usar isso aqui. Embora eu ache que a importação de distutils pode ser lenta, talvez apenas adicione try:/except: Não é muito importante para começar.

Não consegui encontrar a solicitação de pull, @ nejib1 , por acaso você está trabalhando nisso.

@ anirudh2290 Não existe um PR, você poderia fazer um? Parece haver duas correções, uma fornecida no relatório e o uso de @seberg de LooseVersion .

Esta página foi útil?
0 / 5 - 0 avaliações