对于可能会干扰其他软件包的大型 Python 包,建议将它们安装到自己的虚拟环境中,并且某些 Python 包会将 CLI 命令公开给 shell。
有没有办法将这样的包pip安装到它自己的虚拟环境中, 但无需切换即可从普通外壳访问 CLI 命令 事先手动到这个虚拟环境?
这里有一个例子:当我通过以下方式安装csvkit时
pip install csvkit
我有命令csvcut
,csvlook
,csvgrep
和我 壳。但是,如果我不想在我的系统-Python中安装cvskit,并且 将其安装在虚拟环境中,例如在~/venvs/csvkit
,我有csvkit仅在我手动激活环境时才可用csvkit
.
有没有办法创建虚拟环境并在其中安装csvkit, 以便像csvcut
这样的命令在之前激活环境本身 他们跑了?
一个仍然维护得很好的较新的工具是pipx - 在隔离环境中安装和运行Python应用程序。它的工作原理类似于pipsi:
- 首先安装
pipx
。(见 pipx 安装) -
然后发布:
pipx install csvkit
-
最后确保
pipx
的 bin 目录(通常~/.local/bin
)在您的 PATH 中。
请注意,pipx 有额外的命令来维护和检查生成的 venv - 见pipx --help
。
您可以创建别名(如csvcut
并将其指向source ~/venvs/csvkit/bin/activate && csvcut && source deactivate
如果此程序接受参数,则可以使用函数并在.bashrc
文件中定义:
csvcut() {
#do things with parameters like $1 such as
source ~/venvs/csvkit/bin/activate
csvcut $1 $2 $3 $4 $5
deactivate
}
要调用该函数,只需使用csvcut <your_parameter>
命令。
使用pipsi
.以下是项目自述文件中的描述:
pipsi 将每个软件包安装到 ~/.local/venvs/PKGNAME 中,然后将所有新脚本符号链接到 ~/.local/bin 中(这些脚本可以分别通过 PIPSI_HOME 和 PIPSI_BIN_DIR env 变量进行更改)。
与 pip install --user 相比,每个 PKGNAME 都安装到自己的 virtualenv 中,因此您不必担心不同的
PKGNAME
具有冲突的依赖项。
它对csvkit
是一种享受:
-
首先安装
pipsi
。 -
然后发布:
pipsi install csvkit
-
最后确保
pipsi
的 bin 目录(通常为~/.local/bin
)在您的 PATH 中。
就是这样!现在您可以在逗号行上键入,例如
csvcut --help
在自己的虚拟环境中调用csvcut
。
无需手动激活 virtualenv,您的系统 Python 也不会被其他软件包污染(除了pipsi
软件包)。