Python 模块 'datetime' 没有属性 'datetime_CAPI'
Python module 'datetime' has no attribute 'datetime_CAPI'
我需要在具有 ARM SoC 的嵌入式系统中 运行 numpy,因此我使用 arm-linux-gnueabihf- 交叉编译了 Python 3.8.10 和 Numpy-海合会。然后我将可执行文件和库都复制到嵌入式系统。但是当我尝试导入 numpy 时,出现以下错误:
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/dist-packages/numpy/__init__.py", line 142, in <module>
from . import core
File "/usr/lib/python3.8/dist-packages/numpy/core/__init__.py", line 17, in <module>
from . import multiarray
File "/usr/lib/python3.8/dist-packages/numpy/core/multiarray.py", line 14, in <module>
from . import overrides
File "/usr/lib/python3.8/dist-packages/numpy/core/overrides.py", line 7, in <module>
from numpy.core._multiarray_umath import (
AttributeError: module 'datetime' has no attribute 'datetime_CAPI'
于是查看了datetime的属性:
>>> import datetime as dt
>>> dir(dt)
['MAXYEAR', 'MINYEAR', '_DAYNAMES', '_DAYS_BEFORE_MONTH', '_DAYS_IN_MONTH', '_DI100Y', '_DI400Y', '_DI4Y',
'_EPOCH', '_MAXORDINAL', '_MONTHNAMES', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
'__name__', '__package__', '__spec__', '_build_struct_time', '_check_date_fields', '_check_int_field', '
_check_time_fields', '_check_tzinfo_arg', '_check_tzname', '_check_utc_offset', '_cmp', '_cmperror',
'_date_class', '_days_before_month', '_days_before_year', '_days_in_month', '_divide_and_round', '_format_offset',
'_format_time', '_is_leap', '_isoweek1monday', '_math', '_ord2ymd', '_parse_hh_mm_ss_ff', '_parse_isoformat_date',
'_parse_isoformat_time', '_time', '_time_class', '_tzinfo_class', '_wrap_strftime', '_ymd2ord', 'date', 'datetime',
'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
我注意到两件事,一个是私有函数正在显示,另一个是属性“datetime_CAPI”不存在。这解释了为什么它显示该错误。
我在用于构建 Python 的 PC 上做了同样的检查,我得到:
>>> import datetime as dt
>>> dir(dt)
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
检查“datetime_CAPI_ 属性显示:
>>> dt.datetime_CAPI
<capsule object "datetime.datetime_CAPI" at 0x7f58e6242720>
它似乎是某种用于从 Python 调用 C 函数的对象。
但是为什么不见了?
我发现了问题,这是一个 Python 编译问题。我使用以下命令编译Python,问题解决
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar \
RANLIB=arm-linux-gnueabihf-ranlib \
./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf \
--build=x86_64-linux-gnu --prefix=$HOME/python3.8.10 \
--disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
ac_cv_have_long_long_format=yes --enable-shared
make HOSTPYTHON=$HOME/python3.8.10 \
BLDSHARED="arm-linux-gnueabihf-gcc -shared" CROSS-COMPILE=arm-linux-gnueabihf- \
CROSS_COMPILE_TARGET=yes HOSTARCH=arm-linux BUILDARCH=arm-linux-gnueabihf
make altinstall HOSTPYTHON=$HOME/python3.8.10 \
BLDSHARED="arm-linux-gnueabihf-gcc -shared" CROSS-COMPILE=arm-linux-gnueabihf- \
CROSS_COMPILE_TARGET=yes HOSTARCH=arm-linux BUILDARCH=arm-linux-gnueabihf \
prefix=$HOME/python3.8.10/_install
我需要在具有 ARM SoC 的嵌入式系统中 运行 numpy,因此我使用 arm-linux-gnueabihf- 交叉编译了 Python 3.8.10 和 Numpy-海合会。然后我将可执行文件和库都复制到嵌入式系统。但是当我尝试导入 numpy 时,出现以下错误:
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/dist-packages/numpy/__init__.py", line 142, in <module>
from . import core
File "/usr/lib/python3.8/dist-packages/numpy/core/__init__.py", line 17, in <module>
from . import multiarray
File "/usr/lib/python3.8/dist-packages/numpy/core/multiarray.py", line 14, in <module>
from . import overrides
File "/usr/lib/python3.8/dist-packages/numpy/core/overrides.py", line 7, in <module>
from numpy.core._multiarray_umath import (
AttributeError: module 'datetime' has no attribute 'datetime_CAPI'
于是查看了datetime的属性:
>>> import datetime as dt
>>> dir(dt)
['MAXYEAR', 'MINYEAR', '_DAYNAMES', '_DAYS_BEFORE_MONTH', '_DAYS_IN_MONTH', '_DI100Y', '_DI400Y', '_DI4Y',
'_EPOCH', '_MAXORDINAL', '_MONTHNAMES', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
'__name__', '__package__', '__spec__', '_build_struct_time', '_check_date_fields', '_check_int_field', '
_check_time_fields', '_check_tzinfo_arg', '_check_tzname', '_check_utc_offset', '_cmp', '_cmperror',
'_date_class', '_days_before_month', '_days_before_year', '_days_in_month', '_divide_and_round', '_format_offset',
'_format_time', '_is_leap', '_isoweek1monday', '_math', '_ord2ymd', '_parse_hh_mm_ss_ff', '_parse_isoformat_date',
'_parse_isoformat_time', '_time', '_time_class', '_tzinfo_class', '_wrap_strftime', '_ymd2ord', 'date', 'datetime',
'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
我注意到两件事,一个是私有函数正在显示,另一个是属性“datetime_CAPI”不存在。这解释了为什么它显示该错误。 我在用于构建 Python 的 PC 上做了同样的检查,我得到:
>>> import datetime as dt
>>> dir(dt)
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
检查“datetime_CAPI_ 属性显示:
>>> dt.datetime_CAPI
<capsule object "datetime.datetime_CAPI" at 0x7f58e6242720>
它似乎是某种用于从 Python 调用 C 函数的对象。 但是为什么不见了?
我发现了问题,这是一个 Python 编译问题。我使用以下命令编译Python,问题解决
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar \
RANLIB=arm-linux-gnueabihf-ranlib \
./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf \
--build=x86_64-linux-gnu --prefix=$HOME/python3.8.10 \
--disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
ac_cv_have_long_long_format=yes --enable-shared
make HOSTPYTHON=$HOME/python3.8.10 \
BLDSHARED="arm-linux-gnueabihf-gcc -shared" CROSS-COMPILE=arm-linux-gnueabihf- \
CROSS_COMPILE_TARGET=yes HOSTARCH=arm-linux BUILDARCH=arm-linux-gnueabihf
make altinstall HOSTPYTHON=$HOME/python3.8.10 \
BLDSHARED="arm-linux-gnueabihf-gcc -shared" CROSS-COMPILE=arm-linux-gnueabihf- \
CROSS_COMPILE_TARGET=yes HOSTARCH=arm-linux BUILDARCH=arm-linux-gnueabihf \
prefix=$HOME/python3.8.10/_install