有没有办法使用 python 以 root 身份安装的库与未以 root 身份安装的库一起使用?

Is there a way to use python libraries installed as root alongside libraries not installed as root?

我正在为 Raspberry Pi 编写一个 python 应用程序,它应该能够响应键盘快捷键。我已经尝试使用替代解决方案,但最后似乎在上下文中运行良好的唯一方法是键盘 (https://pypi.org/project/keyboard/)。

键盘库在基于 Linux 的系统上需要 root 权限。以 root 身份安装键盘(例如 'sudo pip3 install keyboard')非常简单,运行 以 root 身份使用键盘的 python 程序也是如此。但是,keyboard 并不是我将使用的唯一第三方库,而且这些库最初并没有以 root 身份安装。因此,当我 运行 我的应用程序作为 root 时,它只能导入键盘,而如果我不作为 root 运行 它,它可以导入除键盘之外的所有内容。

我是否需要以 root 身份重新安装所有其他库以使它们与键盘一起工作,或者当 运行将我的应用程序作为root 才能使用键盘?

只要有可能,最好以非 root 用户身份安装库。我不熟悉键盘包,但也许它只要求用户属于特定组。我猜你只需要用户在 input 组(或拥有 /dev/input 中的设备的组)。如果可能,我会尝试将用户添加到输入组:

sudo usermod -aG input USER

请务必注销并以该用户身份重新登录,因为在启动新会话之前,该用户不会被添加到组中。

如果您确实需要 运行 作为 root,您有几个选择...

您可以以 root 身份安装所有库,也可以在 运行 可执行文件时添加到 python 路径。这可以使用 PYTHONPATH 环境变量来完成。

PYTHONPATH

Augment the default search path for module files. The format is the same as the shell’s PATH: one or more directory pathnames separated by os.pathsep (e.g. colons on Unix or semicolons on Windows). Non-existent directories are silently ignored.

In addition to normal directories, individual PYTHONPATH entries may refer to zipfiles containing pure Python modules (in either source or compiled form). Extension modules cannot be imported from zipfiles.

The default search path is installation dependent, but generally begins with prefix/lib/pythonversion (see PYTHONHOME above). It is always appended to PYTHONPATH.

An additional directory will be inserted in the search path in front of PYTHONPATH as described above under Interface options. The search path can be manipulated from within a Python program as the variable sys.path.

您可以在 运行 可执行文件时简单地设置 PYTHONPATH。

PYTHONPATH=/PATH/TO/USER/LIBRARIES /path/to/application