前言
最近在整一个新的小计划,来自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.