如何在 PEP-668 之后安装自己的 python 包作为命令系统使用?

问题描述 投票:0回答:1

我有一个用 Python 编写的实用程序,我曾经使用过它,现在需要再次使用它。

它是作为我安装的包和带有 shebang 的可执行脚本完成的,该脚本将被导入并调用 main 函数。

使用方式与其他语言中的任何其他实用程序一样。只需调用包装模块主调用的可执行文件即可。

但是将 Ubuntu 从 22.04 更新到 24.04 后,当我尝试使用 pip 在系统范围内安装软件包时,我收到 PEP-668 定义的以下消息:

$ /usr/bin/python3 -m pip install -U --user -e ./
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.12/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.

我设法使用 APT 包等效项 (python-xyz) 安装依赖项,但对于安装我自己的包,这不起作用。

我不习惯 venvs,但在使用它之前它们需要额外的步骤,例如激活环境等,我无法与系统范围的可用脚本协调。我可以选择 Python 二进制文件来运行 shebang 中的脚本,但这就是我认为我能做的。

那么,在 PEP-668 之后,如何创建一个在系统范围内运行的应用程序,可以从 shell 或

.desktop
XDG 应用程序条目调用,而无需编写本地 Debian(或任何其他操作系统)包?

详细信息:相关应用程序是开源的,可以在这里找到:https://github.com/AllanDaemon/uchoose

编辑: 像上面那样使用 pip 和

--break-system-packages
以及其他技巧,对我来说确实有效。但这似乎太hackish了。也许这是这种情况的理想解决方案,但我感觉这并不理想。
/usr/bin/python3 -m pip install --break-system-packages -U --user ./

python pip python-packaging
1个回答
0
投票

使用

venv
创建系统范围内的 Python 安装将是最简洁的方法。

使用管理员用户拥有的位置(例如

/opt/venv
)是一个好主意。以专用用户身份管理
venv
的优点是无需以 root 身份运行模块安装。

然后您想要使用此

venv
的脚本可以将位置硬编码在shebang行中,例如

 #!/opt/venv/bin/python

或者我的偏好是在

/opt/venv/bin
开头使用
$PATH
修改用户环境,以便您可以使用更灵活的:

#!/usr/bin/env python

或者,如果您从包中安装这些脚本,那么使用 Python 包管理来创建 可执行脚本 是最好的主意,并且避免在脚本中使用 shebang 行。

创建

venv
的步骤可能如下所示:

root# python3 -m venv /opt/venv
root# chown -R venv_admin:venv_admin /opt/venv
root# su - venv_admin
venv_admin$ export PATH=/opt/venv/bin:$PATH
venv_admin$ pip install --upgrade pip wheel
venv_admin$ pip install some_awesome_package
© www.soinside.com 2019 - 2024. All rights reserved.