对于可能干扰其他软件包的较大Python软件包,建议将它们安装到自己的虚拟环境中,一些Python软件包将CLI命令暴露给shell。
有没有办法将这样的软件包安装到自己的虚拟环境中,但是可以从普通shell访问CLI命令而无需事先手动切换到此虚拟环境?
这里有一个例子:当我安装csvkit时
pip install csvkit
我有命令csvcut
,csvlook
,csvgrep
和我的shell中提供的其他命令。但是,如果我不想在我的System-Python中安装cvskit并将其安装在虚拟环境中,比如在~/venvs/csvkit
,我只有在手动激活环境csvkit
时才能使用csvkit。
有没有办法创建虚拟环境并在其中安装csvkit,以便像csvcut
这样的命令在运行之前自己激活环境?
您可以创建别名,例如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
s。
它适用于csvkit
:
pipsi
。pipsi install csvkit
pipsi
的bin目录(通常是~/.local/bin
)在你的PATH中。而已!现在您可以输入命令行,例如
csvcut --help
在自己的virtualenv中称csvcut
。
没有必要手动激活virtualenv,你的系统Python不会被其他软件包污染(除了pipsi
软件包一劳永逸)。