由bash-3.2$ pipenv shellShell for UNKNOWN_VIRTUAL_ENVIRONMENT alread转pipenv,轻松管理多个Python环境

Posted Jason_WangYing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由bash-3.2$ pipenv shellShell for UNKNOWN_VIRTUAL_ENVIRONMENT alread转pipenv,轻松管理多个Python环境相关的知识,希望对你有一定的参考价值。

最近不知道什么原因,原来一直用的好好的virtualenv不能用了,进入虚拟环境后,pip指向虚拟环境,python指向本机环境,找了半天也没找到具体问题,卸载安装试了好几遍就是不行,所以准备弃用virtualenv(主要是不弃用不行,不能用啊)。

它叫 pipenv ,这个管理工具是 Kennethreitz 大神的作品,K神在Python界非常有名,其中大名鼎鼎的request库就是K神写的,这个库 Github 上也收获了 20900 颗星。过去我们一般用virtualenv搭建虚拟环境,管理python版本,但是跨平台的使用不太一致,且有时候处理包之间的依赖总存在问题;过去也常常用 pip进行包的管理,pip已经足够好,但是仍然推荐pipenv,相当于virtualenv和pip的合体,且更加强大

pipenv主要有以下特性:

(1)pipenv集成了pip,virtualenv两者的功能,且完善了两者的一些缺陷。

(2)过去用virtualenv管理requirements.txt文件可能会有问题,Pipenv使用Pipfile和Pipfile.lock,后者存放将包的依赖关系,查看依赖关系是十分方便。

(3)各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。。

(4)通过加载.env文件简化开发工作流程。

(5)支持Python2 和 Python3,在各个平台的命令都是一样的。
 

一、如何安装

直接用 pip install pipenv

二、常见的操作

1).创建虚拟环境

切换到你的项目根目录,执行 pipenv —Python Python版本,就会生成虚拟环境。

注意命令中指定的Python版本必须是你系统上存在指定的 Python 版本,否则就会报如下错误:

如果不想指定版本,直接用系统的Python版本号,可以直接这样

mkdir project
cd project
pipenv install

2).安装和卸载Python模块

安装第三方库就可以不用 pip了,可以使用 pipenv install 库名,语法和 pip 指令类似,安装 httpx 执行的指令如下:

卸载第三方库时,执行 pipenv unstall 库名这个命令即可,例如卸载 django:

项目提交时,可将Pipfile 文件和Pipfile.lock文件一并提交,待其他开发者克隆下载,根据此Pipfile 运行命令pipenv install --dev生成自己的虚拟环境。

3).查看项目环境所安装的第三方库

pipenv graph

执行 pipenv graph 就会列出你所安装的第三方库信息,还能查看各个库之间的依赖关系。

pipenv 使用 Pipfile 来代替 requirement.txt 文件记录 Python第三方库 的信息。它增加了Pipfile.lock 文件来锁定Python 第三方库的包名及版本,以及其依赖关系的列表。

在开发环境下我们要安装 pytest 这样的库,这些在生产环境其实是用不上的,所以没必要记录到 Pipfile 中,那么我们在安装某个包的时候可以在 install 后面加个参数 —dev,表示只安装在开发环境,安装包记录是在[dev-packages] 部分。

在安装时,指定—dev参数,则只安装 [dev-packages] 下的包,若安装时不定指定—dev参数,只会安装[packages] 包下面的模块。[requires] 下的 Python 在构建新的虚拟环境时,若没有会自动下载安装。

项目提交时,可将Pipfile 文件和Pipfile.lock文件受控提交,待其他开发克隆下载,根据此 Pipfile 运行命令pipenv install 生成自己的虚拟环境。

Pipfile.lock 文件是通过hash算法将包的名称和版本,及依赖关系生成哈希值,可以保证包的完整性。

使用 pipenv 第三方库后不用再额外执行其他记录第三方库信息的操作,它会自动记录新安装的第三方库信息到 Pipfile 和 Pipfile.lock 文件中。

4).运行 Python 脚本

运行 Python 脚本时无需执行激活虚拟环境,直接在项目中的 Pipfile 同级目录下执行 Pipenv run Python 脚本文件即可。

5).兼容requirements.txt 文件

pipenv可以像virtualenv一样用命令生成requirements.txt 文件,命令如下:

pipenv lock -r --dev > requirements.txt

pipenv也可以通过requirements.txt安装包

pipenv install -r requirements.txt

常用命令一览

pipenv --where                 列出本地工程路径
pipenv --venv                  列出虚拟环境路径
pipenv --py                    列出虚拟环境的Python可执行文件
pipenv install                 创建虚拟环境
pipenv isntall [moduel]        安装包
pipenv install [moduel] --dev  安装包到开发环境
pipenv uninstall[module]       卸载包
pipenv uninstall --all         卸载所有包
pipenv graph                   查看包依赖
pipenv lock                    生成lockfile
pipenv run python [pyfile]     运行py文件
pipenv --rm                    删除虚拟环境

6).Pycharm 中引入 pipenv 中的虚拟环境

执行 pipenv --venv 得到当前虚拟环境的文件夹位置

找到虚拟环境文件夹所在位置,并选中 bin 目录下的 Python 后,就可以用 Pycharm 引入虚拟环境了

找到虚拟环境文件夹所在位置,并选中 bin 目录下的 Python 后,就可以用 Pycharm 引入虚拟环境了

更多内容参见:pipenv 的GitHub地址

通过使用我发现我现在比较喜欢 pipenv 自动记录新安装的第三方库的信息,再也不用怕忘记更新项目依赖库的信息了,有兴趣的小伙伴赶紧试试哦。

补充:常见问题

在virtualenv中经常用deactivate退出虚拟环境,其实在pipenv中这样退出时不对的,正确的退出方式是exit()来退出,如果使用deactivate退出虚拟环境会出现下面的情况

bash-3.2$ pipenv shell
Shell for UNKNOWN_VIRTUAL_ENVIRONMENT already activated.
No action taken to avoid nested environments.

可以使用pipenv shell --anyway

bash-3.2$ pipenv shell --anyway
Launching subshell in virtual environment...
bash-3.2$  . /Users/wangying/.virtualenvs/workjob-zj6M9ale/bin/activate
(workjob) bash-3.2$ 

以上是关于由bash-3.2$ pipenv shellShell for UNKNOWN_VIRTUAL_ENVIRONMENT alread转pipenv,轻松管理多个Python环境的主要内容,如果未能解决你的问题,请参考以下文章

2.pipenv包管理工具

pipenv 使用基本命令

pipenv快速入门

pipenv的使用

安装pipenv

安装pipenv