Python内置socket包升级

问题描述

我的树莓派上安装了 python 3.7.1。我使用 pyenv 按照以下说明升级到 python 3.9.1:

https://yeti.co/blog/setting-up-a-raspberry-pi-with-raspbian-and-pyenv-running-python-35/

现在,我按照命令 python3 -V 运行 python 3.9.1,但是当我运行我的程序时,我收到错误,因为内置套接字包似乎没有升级到 3.9.1。我可以看到这一点,因为当我在 python3 中运行 dir(socket) 时,我缺少 3.9.1 套接字附加组件(名为 J1939)。

socket模块升级方法是什么?由于它是一个内置包,我无法使用 pip3 升级它。

谢谢。

解决方法

问题不在于 Python。 socket模块随着python升级而升级。

问题是在树莓派上默认未启用内核模块 can-j1939。

我按照说明在这里添加了一个新的内核模块: https://www.raspberrypi.org/documentation/linux/kernel/building.md#default_configuration

我用 menuconfig 配置内核得到 can-1939

  • 网络支持 - 可以总线子系统支持 - SAE J1939

然后我构建了内核模块。

我激活了 can-1939 模块。

sudo modprobe can-j1939

最后一步是手动添加头文件:

sudo cp ~/linux/include/uapi/linux/can.h /usr/include/linux/can.h
sudo cp ~/linux/include/uapi/linux/can/j1939.h /usr/include/linux/can/

下面的链接很有用,但它适用于 debian 而不是 raspberry pi: https://github.com/linux-can/can-utils/blob/master/can-j1939-install-kernel-module.md