tws*_*wsh 5 package-management python apt pip 23.04
我想在一些 Python 代码中使用panfrude包,如下所示:import panflute。如果可以避免的话,我不想每次运行该代码时都启动虚拟环境。(显然,这是一个 Pandoc 过滤器。)
我试过了$ sudo apt install python3-panflute,但是没有这样的包。然后我尝试使用pipx。这会安装 panfute,但我收到“ModuleNotFoundError:没有名为 'panfrude' 的模块”错误。
我认为通过 pipx 安装应该使包可以作为模块导入是错误的吗?我是不是漏掉了一步?
我使用的是 Ubuntu 23.04。
pipx与pippipx(在隔离环境中安装和运行 Python 应用程序)并不是pip(Python 包安装程序)的同等替代方案...它的使用pip和工作方式也不同 \xe2\x80\xa6 它隔离了它下载的应用程序/包...所以,它们不可用于该隔离环境之外的 Python 系统...它为安装的每个应用程序创建一个单独的虚拟环境 \xe2\x80\xa6 然而,其主要目的是使 Python 应用程序可以作为常规命令运行控制台/终端中的命令行,而不是让它们对 Python 解释器可用(可导入)。
然而,这(使用pipPython3模块):
python3 -m pip install -U panflute\nRun Code Online (Sandbox Code Playgroud)\n在系统范围内运行(不建议)或在虚拟环境中运行(首选)应该安装并更新该包,以便解释器可以导入它。
\n也就是说,您使用的是Ubuntu 23.04(包括更高版本),系统范围内的 Python 包安装被禁止(默认情况下)通过 Python 包管理器(如APT)进行安装pip,并移交给发布包管理器(如 APT)以符合PEP 668 \xe2\ x80\x93 将 Python 基础环境标记为 \xe2\x80\x9c 外部管理\xe2\x80\x9d ... 当尝试使用pip(包括其他 Python 包管理器)安装系统范围的(即在虚拟环境之外)包:
error: externally-managed-environment\n\n\xc3\x97 This environment is externally managed\n\xe2\x95\xb0\xe2\x94\x80> To install Python packages system-wide, try apt install\n python3-xyz, where xyz is the package you are trying to\n install.\n \n If you wish to install a non-Debian-packaged Python package,\n create a virtual environment using python3 -m venv path/to/venv.\n Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make\n sure you have python3-full installed.\n \n If you wish to install a non-Debian packaged Python application,\n it may be easiest to use pipx install xyz, which will manage a\n virtual environment for you. Make sure you have pipx installed.\n \n See /usr/share/doc/python3.11/README.venv for more information.\n\nnote: 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.\nhint: See PEP 668 for the detailed specification.\nRun Code Online (Sandbox Code Playgroud)\n但是,建议的包命名为:
\nTo install Python packages system-wide, try apt install\npython3-xyz, where xyz is the package you are trying to\ninstall.\nRun Code Online (Sandbox Code Playgroud)\n只是一个建议,并不一定意味着该软件包已经在 Ubuntu 官方存储库中提供...因此,您应该首先通过以下方式确认其可用性:
\n$ apt search python3-panflute\nSorting... Done\nFull Text Search... Done\nRun Code Online (Sandbox Code Playgroud)\n不幸的是,正如您所看到的,该软件包尚不可用(至少从官方存储库中)。
\n安装尚未通过 APT 提供的 Python3 软件包(通常名称为python3-packagename)的最佳选择是从您创建的 Python3 虚拟环境内部执行此操作,并使用pip上述安装方法。
创建和使用虚拟环境实际上并不那么困难,无论是在脚本中还是在终端 \xe2\x80\xa6 中,请参见示例:
\n注意:还有另一个选项可以将这两个选项传递--user --break-system-packages给该选项,这将强制安装软件包 \xe2\x80\xa6 这虽然仅限于用户环境,但不被认为是安全的,并且可能仍然会执行它所说的操作,即不会pip执行--break-system-packages建议要么。
\n\n我认为通过 pipx 安装应该使包可以作为模块导入是错误的吗?我是不是漏掉了一步?
\n
pipx用于安装应用程序,而不是用于管理开发环境。它实际上在底层创建了一个虚拟环境来支持这个用例,这就是为什么它对系统的其余部分没有影响。如果您\xe2\x80\x99 尝试进行开发工作,则需要不同的工具。
\n\n如果可以避免的话,我不想每次运行该代码时都启动虚拟环境。
\n
你不能使用 Python 来避免它,除非这些包可以通过你的系统包管理器获得。某个地方可能有包含排笛的 PPA,但我猜可能不会。
\n也就是说,处理这个问题并不一定很困难,有很多方法可以以透明的方式处理这个问题。\xe2\x80\x98classic\xe2\x80\x99 方法是只编写一个简短的 shell 脚本,在您需要运行该程序的虚拟环境中运行该程序(这实际上是一个三行脚本,并且第一行只是#!/bin/sh让内核将其识别为 shell 脚本所必需的)。
或者,看看诗歌,它可以毫无问题地为您处理大部分内容,并且在您将获得的基础上添加了一些显着改进的依赖管理工具pip。您可以通过运行以下命令在 Ubuntu 22.04 及更高版本中安装 python3-poetry:
sudo apt install python3-poetry\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3866 次 |
| 最近记录: |