前言

最近在整一个新的小计划,来自52pi的ZP-0129,但是发生一点安装python的小问题,具体看正文。

正文

1. externally-managed-environment

其实问题就是52pi官方wikiZP-0129,这里说的:

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.11/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

发生了这个问题,然后官方推荐的结果是pip install -r requirements.txt is failing: "This environment is externally managed",其实出现这个问题的原因就是我们尝试去混合使用apt提供的包 和 pip提供的包(来自stack overflow的答案:这是因为您的发行版采用了 PEP 668 – 将 Python 基础环境标记为“外部管理”。),这里的最优解是使用python 虚拟环境(venv)

2. venv - python 虚拟环境

在项目的目录下,创建一个python虚拟环境,然后之后我们安装的所有包都会在这个python虚拟环境下面,类似conda的python版本管理:

python3 -m venv .venv
source .venv/bin/activate

这个命令会让我们在我们的项目目录下面创建一个python虚拟环境并且激活,然后我们可以直接使用了,如果要用pip3的话,那就是.venv/bin/pip3,如果用python3的话,那就是.venv/bin/python3

这里我们的OLED命令是

sudo -H pip3 install -e .
cd examples/
python3 clock.py

那我们就是

sudo -H .venv/bin/pip3 install -e .
cd examples
../.venv/bin/python3 clock.py

3. 额外 - UPS项目

看到一个挺有意思的项目Github - geeekpi/upsplus,如果之后有需要也做一个blog吧。

总结

说实话这个确实挺有用的,我之前只用conda配置过不同的python虚拟环境,这个属于新学到了,感觉和conda那个有异曲同工之妙,类似这个Managing Python

参考

[1] ZP-0129
[2] venv
[3] Managing Python
[4] Github - geeekpi/upsplus

Q.E.D.


立志做一个有趣的碳水化合物