跳转到主要内容

在隔离环境中安装和运行Python应用程序

项目描述

pipx —— 在隔离环境中安装和运行 Python 应用程序

image PyPI version

文档: https://pipx.pypa.io

源代码: https://github.com/pypa/pipx

与其他工具(包括 pipsi)的比较,请参阅 其他工具比较

安装 pipx

[!WARNING]

不建议通过 pipx 安装 pipx。如果您仍然想要这样做,请查看 pipx-in-pipx 项目,并阅读那里的限制。

在 macOS 上

brew install pipx
pipx ensurepath
sudo pipx ensurepath --global # optional to allow pipx actions with --global argument

使用 brew update && brew upgrade pipx 升级 pipx。

在 Linux 上

  • Ubuntu 23.04 或更高版本
sudo apt update
sudo apt install pipx
pipx ensurepath
sudo pipx ensurepath --global # optional to allow pipx actions with --global argument
  • Fedora
sudo dnf install pipx
pipx ensurepath
sudo pipx ensurepath --global # optional to allow pipx actions with --global argument
  • Arch
sudo pacman -S python-pipx
pipx ensurepath
sudo pipx ensurepath --global # optional to allow pipx actions with --global argument
  • 在其他发行版上使用 pip
python3 -m pip install --user pipx
python3 -m pipx ensurepath
sudo pipx ensurepath --global # optional to allow pipx actions with --global argument

使用 python3 -m pip install --user --upgrade pipx 升级 pipx。

在 Windows 上

scoop install pipx
pipx ensurepath

使用 scoop update pipx 升级 pipx。

  • 通过 pip 安装(需要 pip 19.0 或更高版本)
# If you installed python using Microsoft Store, replace `py` with `python3` in the next line.
py -m pip install --user pipx

上面的操作可能以类似以下的警告结束

WARNING: The script pipx.exe is installed in `<USER folder>\AppData\Roaming\Python\Python3x\Scripts` which is not on PATH

如果是这样,请转到提到的文件夹,允许您直接运行 pipx 可执行文件。输入以下行(即使您没有收到警告)

.\pipx.exe ensurepath

这将添加上述提到的路径和 %USERPROFILE%\.local\bin 文件夹到您的搜索路径中。重新启动您的终端会话并验证 pipx 是否运行。

使用 py -m pip install --user --upgrade pipx 升级 pipx。

不安装(通过 zipapp)使用 pipx

您也可以不安装 pipx 就使用它。zipapp 可以从 Github 发布版 下载,您可以使用 Python 3.8+ 解释器调用它

python pipx.pyz ensurepath

与 pre-commit 一起使用

pipx 支持 pre-commit

Shell 完整性

按照此命令打印的说明,可以获得 Shell 完整性。

pipx completions

有关更多详细信息,请参阅 安装说明

概述:什么是 pipx

pipx 是一个帮助您安装和运行用 Python 编写的最终用户应用程序的工具。它与 macOS 的 brew、JavaScript 的 npx 和 Linux 的 apt 大致相同。

它与 pip 密切相关。实际上,它使用 pip,但专注于安装和管理可以直接从命令行作为应用程序运行的 Python 包。

它与 pip 有何不同?

pip 是一个通用的库和应用程序安装程序,没有环境隔离。pipx 是专门为应用程序安装设计的,因为它增加了隔离,但仍然使应用程序可用于您的 shell:pipx 为每个应用程序及其相关包创建一个隔离环境。

pipx 不附带 pip,但安装它通常是引导系统的一个重要部分。

pipx 从哪里安装应用程序?

默认情况下,pipx 使用与 pip 相同的包索引,PyPI。pipx 还可以从 pip 可以安装的所有其他来源安装,例如本地目录、wheel、git url 等。

Python 和 PyPI 允许开发者使用“控制台脚本入口点”分发代码。这些入口点允许用户从命令行调用 Python 代码,实际上充当独立应用程序。

pipx 是一个工具,可以安全、方便、可靠地安装和运行数千个包含应用程序的软件包。从某种意义上说,它将 Python 包索引(PyPI)变成了一个针对 Python 应用程序的大型应用商店。并非所有 Python 软件包都有入口点,但许多都有。

如果您想使您的软件包与 pipx 兼容,只需添加一个 控制台脚本入口点。如果您是 poetry 用户,请使用 这些说明。或者,如果您使用 hatch,请 尝试这个

功能

pipx 允许您

  • 使用 install 命令将软件包的 CLI 入口点(“应用程序”)暴露在独立的环境中,这保证了没有依赖冲突和干净的卸载!
  • 轻松列出、升级和卸载使用 pipx 安装的软件包
  • 使用 run 命令在临时环境中运行 Python 应用程序的最新版本

最好的是,pipx 以普通用户权限运行,永远不会调用 sudo pip install(您不会这样做,对吧?😄)。

教程:使用 pipx 安装软件包及其应用程序

您可以通过运行以下命令全局安装应用程序:

pipx install PACKAGE

这会自动创建一个虚拟环境,安装软件包,并将软件包相关的应用程序(入口点)添加到您的 PATH 上的某个位置。例如,pipx install pycowsay 会使 pycowsay 命令全局可用,但将 pycowsay 软件包沙盒化在其自己的虚拟环境中。**pipx 从不需要以 sudo 权限运行来执行此操作**。

示例

>> pipx install pycowsay
  installed package pycowsay 2.0.3, Python 3.10.3
  These apps are now globally available
    - pycowsay
done! ✨ 🌟 ✨


>> pipx list
venvs are in /home/user/.local/share/pipx/venvs
apps are exposed on your $PATH at /home/user/.local/bin
   package pycowsay 2.0.3, Python 3.10.3
    - pycowsay


# Now you can run pycowsay from anywhere
>> pycowsay mooo
  ____
< mooo >
  ====
         \
          \
            ^__^
            (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

从源代码控制安装

您还可以从 git 仓库安装。这里以 black 为例。

pipx install git+https://github.com/psf/black.git
pipx install git+https://github.com/psf/black.git@branch  # branch of your choice
pipx install git+https://github.com/psf/black.git@ce14fa8b497bae2b50ec48b3bd7022573a59cdb1  # git hash
pipx install https://github.com/psf/black/archive/18.9b0.zip  # install a release

安装附加功能时,必须使用带有 egg 的 pip 语法

pipx install "git+https://github.com/psf/black.git#egg=black[jupyter]"

注入软件包

如果 pipx 安装的应用程序需要额外的软件包,您可以使用 pipx inject 添加它们。例如,如果您已经安装了 ipython 并想向其中添加 matplotlib 软件包,您将使用

pipx inject ipython matplotlib

您可以通过在命令行上指定所有软件包或在文本文件中列出它们(每行一个软件包)或组合它们来注入多个软件包。例如

pipx inject ipython matplotlib pandas
# or:
pipx inject ipython -r useful-packages.txt

教程:在临时虚拟环境中运行应用程序

这是 pipx install 的另一种选择。

pipx run 下载并运行上面提到的 Python “应用程序”在一个一次性、临时的环境中,之后不会修改您的系统。

当您需要运行应用程序的最新版本,但不想将其安装在您的计算机上时,这很有用。

您可能想在初始化新项目并设置正确的目录结构时做这件事,或者您想查看应用程序的帮助文本,或者如果您只想一次性运行应用程序并在之后不修改系统。

例如,博客文章 如何设置完美的 Python 项目 使用 pipx run 来启动一个新项目,使用 cookiecutter,这是一个从项目模板创建项目的工具。

一个很好的额外好处是,您不需要记住升级应用程序,因为 pipx run 会自动为您运行最新版本。

好的,让我们看看这在实际中是什么样子!

pipx run APP [ARGS...]

这将在一个独立的、临时的目录中安装软件包并调用应用程序。试试看

> pipx run pycowsay moo

  ---
< moo >
  ---
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||


请注意,您**不需要执行任何安装命令来运行应用程序**。

应用程序名称之后的所有参数将直接传递给应用程序

> pipx run pycowsay these arguments are all passed to pycowsay!

  -------------------------------------------
< these arguments are all passed to pycowsay! >
  -------------------------------------------
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||

参数不明确

有时pipx会消耗应用提供的参数

> pipx run pycowsay --py

usage: pipx run [-h] [--no-cache] [--pypackages] [--spec SPEC] [--verbose] [--python PYTHON]
                [--system-site-packages] [--index-url INDEX_URL] [--editable] [--pip-args PIP_ARGS]
                app ...
pipx run: error: ambiguous option: --py could match --pypackages, --python

为了防止这种情况,在APP前加上双横线--。这样pipx会将参数原封不动地转发给应用

> pipx run -- pycowsay --py


  ----
< --py >
  ----
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||


重新运行相同的应用很快,因为pipx会根据每个应用缓存虚拟环境。缓存仅持续几天,当它们过期时,pipx将再次使用软件包的最新版本。这样您就可以确保始终运行软件包的新版本,而无需手动升级。

包含多个应用或应用名称与包名称不匹配

如果应用名称与包名称不匹配,可以使用--spec参数来指定PACKAGE名称,并提供要单独运行的应用APP

pipx run --spec PACKAGE APP

例如,esptool包没有提供同名的可执行文件

>> pipx run esptool
'esptool' executable script not found in package 'esptool'.
Available executable scripts:
    esp_rfc2217_server.py - usage: 'pipx run --spec esptool esp_rfc2217_server.py [arguments?]'
    espefuse.py - usage: 'pipx run --spec esptool espefuse.py [arguments?]'
    espsecure.py - usage: 'pipx run --spec esptool espsecure.py [arguments?]'
    esptool.py - usage: 'pipx run --spec esptool esptool.py [arguments?]'

您可以使用--spec来运行此包提供的可执行文件

pipx run --spec esptool esp_rfc2217_server.py
pipx run --spec esptool espefuse.py
pipx run --spec esptool espsecure.py
pipx run --spec esptool esptool.py

请注意,.py扩展名不是您附加到可执行文件名称上的。它是包提供的一部分,可以是任何内容。例如,当处理pymodbus包时

>> pipx run pymodbus[repl]
'pymodbus' executable script not found in package 'pymodbus'.
Available executable scripts:
    pymodbus.console - usage: 'pipx run --spec pymodbus pymodbus.console [arguments?]'
    pymodbus.server - usage: 'pipx run --spec pymodbus pymodbus.server [arguments?]'
    pymodbus.simulator - usage: 'pipx run --spec pymodbus pymodbus.simulator [arguments?]'

您可以这样运行可执行文件

pipx run --spec pymodbus[repl] pymodbus.console
pipx run --spec pymodbus[repl] pymodbus.server
pipx run --spec pymodbus[repl] pymodbus.simulator

运行特定版本的软件包

上面的PACKAGE参数实际上是一个需求指定器。因此,您也可以指定特定版本、版本范围或额外内容。例如

pipx run mpremote==1.20.0
pipx run --spec esptool==4.6.2 esptool.py
pipx run --spec 'esptool>=4.5' esptool.py
pipx run --spec 'esptool >= 4.5' esptool.py

请注意,某些需求指定器必须用引号或转义字符括起来。

从源代码控制运行

您也可以从git仓库运行。这里以black为例。

pipx run --spec git+https://github.com/psf/black.git black
pipx run --spec git+https://github.com/psf/black.git@branch black  # branch of your choice
pipx run --spec git+https://github.com/psf/black.git@ce14fa8b497bae2b50ec48b3bd7022573a59cdb1 black  # git hash
pipx run --spec https://github.com/psf/black/archive/18.9b0.zip black # install a release

从URL运行

您也可以直接运行.py文件。

pipx run https://gist.githubusercontent.com/cs01/fa721a17a326e551ede048c5088f9e0f/raw/6bdfbb6e9c1132b1c38fdd2f195d4a24c540c324/pipx-demo.py
pipx is working!

总结

这就是全部!这些是pipx提供的最重要的命令。要查看pipx的所有文档,请运行pipx --help或查看文档

推荐

"感谢您改进了pipsi过去覆盖的工作流程。做得很好!"
Jannis Leidel,PSF成员,前pip和Django核心开发者,Python打包权威机构(PyPA)的创始人

"我的设置将pyenv、poetry和pipx结合在一起。[...] 对于我需要的东西,它非常完美。"
Jacob Kaplan-Moss,Django的联合创作者,在《我的Python开发环境,2020版》博客文章中

"我非常喜欢pipx。我认为pipx非常酷。"
Michael Kennedy,PythonBytes播客的联合主持人,在第139集

致谢

pipx受到了pipsinpx的启发。它由Chad Smith创建,并得到了贡献者的大量帮助。标志是由@IrishMorales设计的。

pipx由一支志愿者团队维护(按字母顺序排列)

贡献

问题和拉取请求当然欢迎!查看贡献以开始。所有通过代码库、问题跟踪器、聊天室等方式与pipx项目互动的人应遵循PSF行为准则

项目详情


版本历史 发布通知 | RSS订阅

下载文件

下载适合您平台的应用文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分发

pipx-1.7.1.tar.gz (291.9 kB 查看散列值)

上传时间 源代码

构建分发

pipx-1.7.1-py3-none-any.whl (78.7 kB 查看散列值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面