在隔离环境中安装和运行Python应用程序
项目描述
pipx —— 在隔离环境中安装和运行 Python 应用程序
源代码: 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 安装
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
或查看文档。
推荐
致谢
pipx受到了pipsi和npx的启发。它由Chad Smith创建,并得到了贡献者的大量帮助。标志是由@IrishMorales设计的。
pipx由一支志愿者团队维护(按字母顺序排列)
- Bernát Gábor
- Chad Smith - 共同负责人
- Chrysle
- Jason Lam
- Matthew Clapp - 共同负责人
- Robert Offner
- Tzu-ping Chung
贡献
问题和拉取请求当然欢迎!查看贡献以开始。所有通过代码库、问题跟踪器、聊天室等方式与pipx项目互动的人应遵循PSF行为准则。
项目详情
下载文件
下载适合您平台的应用文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分发
构建分发
pipx-1.7.1.tar.gz的散列值
算法 | 散列值 | |
---|---|---|
SHA256 | 762de134e16a462be92645166d225ecef446afaef534917f5f70008d63584360 |
|
MD5 | 7b2bd7c1397e74e7e7beb04b121702c4 |
|
BLAKE2b-256 | 1721dd6b9a9c4f0cb659ce3dad991f0e8dde852b2c81922224ef77df4222ab7a |
pipx-1.7.1-py3-none-any.whl的散列值
算法 | 散列值 | |
---|---|---|
SHA256 | 3933c43bb344e649cb28e10d357e0967ce8572f1c19caf90cf39ae95c2a0afaf |
|
MD5 | 661d46043471572fff2f5a0ff3e4a805 |
|
BLAKE2b-256 | 35af66db02a214590a841bcd1df1f02f7ef818dc3f43487acddab0b8c40b25d2 |