こんにちは、カーネルのバージョンを検出するときに、__ ini __。py(Python3.8)のコードにエラーがあります。
私は解決策を見つけましたが、他のユーザーを助けるためにここで問題を詳しく説明します。
# 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)
# 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'
このエラーを修正するための解決策は次のとおりです。
python
kernel_version = tuple(int(v[0:2]) for v in kernel_version)
int (v [0: 2] )
は、INTを正しく回復するために、文字列を切り捨てます。
こんにちは、
OVHに同梱されているカーネルでも同じ問題が発生しています。
プルリクエストを行っているようです。 ありがとう!
うーん、私のエラー、なぜここでルーズバージョンを使用しなかったのですか?
ああ、もう一度見てください(今日はもう少し足りないものがあります)、それは奇妙なバージョンの文字列であり、マイクロリリースを落としています。 しかし、 LooseVersion
はそれを正しく処理しているように見えるので、ここでそれを使用できると思います。 distutilsのインポートは遅いかもしれないと思いますが、おそらくtry:/except:
追加するだけで、そもそもそれほど重要ではありません。
プルリクエストが見つかりません@ nejib1はたまたまそれに取り組んでいますか。
@ anirudh2290 PRはありませんが、@ sebergはLooseVersion
ます。