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.*)
要避免安装某个特定的版本,可以使用 != 标识符。
要深入解释有效标识
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!