由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环境的主要内容,如果未能解决你的问题,请参考以下文章