Python多环境管理神器(pipenv)

pipenv

参考官 : https://pipenv.pypa.io/

pipenv 是一款比较新的包管理工具,其借鉴了 javascript 的 npm 和 PHP 的 composer 等理念,通过一个依赖描述文件 Pipfile 来安装和管理依赖,以达到协同开发的目的。如果你熟悉 npm 或者 composer 的话,那 pipenv 正合你胃口。pipenv 其实整合了 pip 和 virtualenv 等库,在其上推出了更便捷的使用方式。

1、安装pipenv

直接使用pip命令安装

pip3 install pipenv

设置命令行的自动补全功能

如果使用的bash shell,请将以下代码添加到 .bashrc 或 .bash_profile 文件内:

eval "$(pipenv --completion)"

参考:
https://blog.csdn.net/swinfans/article/details/89305301

命令详解:

2、pipenv虚拟环境管理

2.1、虚拟环境创建与激活

创建虚拟环境

# 进入项目目录:[root@ops-130 data]# mkdir myproj10[root@ops-130 data]# cd myproj10/[root@ops-130 myproj10]# ls[root@ops-130 myproj10]# pipenv install

上面的命令会自动在
~/.local/share/virtualenvs/目录下创建虚拟环境目录,

名字为一个当前目录名加一串随机字符串的虚拟环境目录。这里是myproj10-740tHe3W

创建过程如下图:

下面多了两个文件,为Pipfile和Pipfile.lock,用于存放依赖包名的文件。

类似php里的composer.json和composer.lock。

[root@ops-130 myproj10]# lsPipfile  Pipfile.lock

查看虚拟环境

[root@ops-130 myproj10]# pipenv --venv/root/.virtualenvs/myproj10-740tHe3W

我们的虚拟环境目录在/root/.virtualenvs/下面,是因为我们之前设置过环境变量

export WORKON_HOME=$HOME/.virtualenvs

激活虚拟环境:

cd /data/myproj10pipenv shell

激活后如下图:

注意:上面激活虚拟环境的时候,出现了这么一个告警:

Warning: Your Pipfile requires python_version 2.7, but you are using 3.9.9 (/root/./m/bin/python).

原因:这是因为创建虚拟环境的时候,没有指定python解释器,Pipfile就使用系统默认的python解释器了,就是2.7.5,但是pipenv却是使用系统最新的解释器3.9.

解决办法:

办法一:手动修改Pipfile

手动修改Pipfile文件里的python_version

注意:Pipfile.lock里的也要修改

vim Pipfile[[source]]url = "https://pypi.org/simple"verify_ssl = truename = "pypi"[packages][dev-packages][requires]python_version = "3.9"

办法二:删除虚拟环境,重新创建虚拟环境

删除虚拟环境后,再次安装会覆盖之前的Pipfile,使用新环境。如果不删除,无法覆盖。

# pipenv --rm删除当前虚拟环境,注意Pipfile不会被删掉[root@ops-130 myproj10]# pipenv --rm# 使用pipenv重新安装,指定解释器版本为3.X[root@ops-130 myproj10]# pipenv install --three# 此时再次查看Pipfile版本就和环境一致了。[root@ops-130 myproj10]# cat Pipfile

如下图:

退出虚拟环境:exit

((myproj10) ) [root@ops-130 myproj10]# exitexit[root@ops-130 myproj10]#

刚创建好虚拟环境的时候,会自动进入虚拟环境,并且此时是没有前缀显示,此时需要用exit退出。

当后面用pipenv shell激活的时候,会显示前缀,此时可以用exit退出,也可以使用deactivate退出。

删除虚拟环境

[root@ops-130 myproj10]# pipenv --rm Removing virtualenv (/root/.virtualenvs/myproj10-740tHe3W)...

2.2、创建虚拟环境的多种方式

pipenv创建虚拟环境有多种方式,这里总结一下:

方式一:指定解释器创建虚拟环境

# 创建虚拟环境pipenv --three# 或者pipenv --python 3.9

这种方式是指定python解释器,并创建虚拟环境。

它会在当前目录生成Pipfile,不会生成Pipfile.lock

这种方式创建虚拟环境后,会自动进入虚拟环境,但是进入后也不会显示前缀

方式二:安装所有依赖时创建虚拟环境

# 创建虚拟环境pipenv install

这种方式是在安装依赖包的同时创建虚拟环境。

因为pipenv install,就是根据Pipfile来安装所有依赖,类似npm install

如果当前目录没有Pipfile,它就会自动创建Pipfile并创建虚拟环境。

因为这种方式它已经在安装所有依赖了,所以不仅会创建Pipfile,也会创建Pipfile.lock文件。

同时,它创建虚拟环境后,也会自动进入环境,但是也不会显示前缀。

如下图:

方式三:激活时创建虚拟环境

# 激活,如果环境不存在,则创建虚拟环境并激活pipenv shell

这个命令主要用于激活环境,但是如果环境不存在,则会先创建虚拟环境,并同时激活虚拟环境。

这种方式因为使用了pipenv shell激活了,所以创建虚拟环境后,也会自动进入虚拟环境,并激活。

会显示虚拟环境前缀。

如下图:

2.3、修改虚拟环境目录位置

有三种方法:

方法一:

# 方法一:# 设置这个环境变量,pipenv会在当前目录下创建.venv的目录,以后都会把模块装到这个.venv下。export PIPENV_VENV_IN_PROJECT=1

方法二:

# 自己在项目目录下手动创建.venv的目录,然后运行 pipenv run 或者 pipenv shell pipenv都会在.venv下创建虚拟环境。mkdir .venvpipenv shell

方法三:

# 设置WORKON_HOME到其他的地方 (如果当前目录下已经有.venv,此项设置失效)。export WORKON_HOME=$HOME/.virtualenvs

注意:

小技巧: 如果子级目录的父级目录已经创建过虚拟环境, 则子级目录无法创建虚拟目录(子级目录无法生成Pipfile, 子级默认会使用父级的虚拟环境), 如果确实需要在子级目录创建独立的虚拟环境,可以运行pipenv –where 获取父级虚拟环境的名字, 根据虚拟环境的前半部分名字, 确定父级目录的位置, 然后删除父级目录下的Pipfile, Pipfile.lock, 运行exit退出父级虚拟环境,然后回到子目录,运行pipenv –three创建子目录的虚拟环境即可

2.4、相关定位操作

定位项目目录:

[root@ops-130 aaa]# pipenv --where/data/myproj10

定位虚拟环境目录,即virtualenv目录

[root@ops-130 aaa]# pipenv --venv/root/.virtualenvs/myproj10-740tHe3W

定位Python解释器:

[root@ops-130 aaa]# pipenv --py/root/.virtualenvs/myproj10-740tHe3W/bin/python

如下图:

3、pipenv包管理

安装依赖包:

安装相关依赖包,并加入到Pipfile

pipenv install flask

它会在当前环境安装flask依赖包,并记录flask包名以及版本信息,记录到Pipfile里。

如果安装的时候,没有指定包名,默认是最新的,会记录为“*”

注意:Pipfile只会记录你install里指定的包,但是这个flask包本身所依赖的包不会记录,

但是所有的依赖详情都会记录到Pipfile.lock中。

Pipfile.lock类似如下:

查看目前安装的库及其依赖关系

pipenv graph

如下图:这是所有的完整依赖关系,这些会记录在Pipfile.lock中。

Pipfile会记录当前虚拟环境安装的所有依赖包及其对应的版本,当我们需要迁移项目,部署新项目,或者有新人接手时,就可以直接拿到这个Pipfile和Pipfile.lock文件,直接pipenv install即可,它就会按照Pipfile里的包,把所有的依赖文件都安装上,是不是很方便。

安装所有依赖包:

# 根据Pipfile的记录,安装所有依赖包pipenv install

指定安装包版本:

你可以使用 语义化( https://semver.org/ )的版本控制方案 指定包的版本。例如 major.minor.micro 。

例如,你可以使用如下的命令安装 requests:

pipenv install requests~=1.2   # 相当于 requests~=1.2.0

Pipenv 将安装 1.2 版本和任何 minor 版本的更新,但不会安装 2.0 版本。

上面的命令将会自动更新 Pipfile 文件以体现这个特殊的需求。

通常,Pipenv使用与pip相同的参数格式。但是,请注意,根据PEP 440,您不能使用包含连字符或加号的版本号。

要指定包含或者排除具体的版本,您可以使用如下命令:

pipenv install "requests>=1.4"   # 只安装等于或者大于 1.4.0 的版本pipenv install "requests<=2.13"  # 只安装小于或者等于 2.13.0 的版本pipenv install "requests>2.19"   # 安装 2.19.1 版本但是不安装 2.19.0 版本

注意:强烈建议使用双引号包裹包名和版本号以避免unix操作系统中的输入和输出重定向问题。

请优先使用 ~= 标识符而不是 == 标识符,因为后者会阻止 pipenv 更新包:

pipenv install "requests~=2.2"  # 锁定包的主版本(这相当于使用==2.*)

要避免安装某个特定的版本,可以使用 != 标识符。

要深入解释有效标识

声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!

(0)
上一篇 2022年1月7日
下一篇 2022年1月7日

相关推荐