资讯专栏INFORMATION COLUMN

快速入门Python 最新最流行的pipenv虚拟环境

roundstones / 392人阅读

摘要:的把最新型最先进的虚拟环境吵得火热。进入后,你会发现用也是能生效的。但是注意进入环境后千万不要用退出,而应该用退出。最佳解决方案是因为这种在其他地方也常见,一般都是没有在环境里安装的问题。

2018的PyCon把最新型最先进的Python虚拟环境pipenv吵得火热。看了下介绍感觉真的很好用,它在virtualenv的基础上包装了一些更便捷的功能,解决了很多很多virtualenv欠缺的事情。

参考pipenv的前世今生:PyCon 2018 之 Python 未来的依赖管理工具 pipenv
参考:pipenv 更优雅的管理你的python开发环境
直接参考创造者Kenneth的官方说明

简单说,pipenv就是把pipvirtualenv包装起来的一个便携工具。

它不会在你的项目文件夹里生成一大堆东西,只有两个文本文件:

Pipfile, 简明地显示项目环境和依赖包。

Pipfile.lock, 详细记录环境依赖,并且利用了hash算法保证了它完整对应关系。只在你使用pipenv lock命令后才出现。

安装

Mac安装很简单,只要用Homebrew:

$ brew install pipenv

Linux的话,是用pip安装:

$ pip install --user pipenv

安装好后,终端里还调取不了命令,因为它现在只是个包。
需要先找到它的真是路径,然后为了方便把它加到bash或zsh等shell里面:

# 先获取python包的位置
$ python -m site --user-base

比如我的显示在/home/pi/.local,那么pipenv就藏在/home/pi/.local/bin里。
所以需要打开shell的设置文件,比如bash的话就编辑~/.bash_profile, zsh的话就编辑~/.zshrc,在里面把刚才查到的包路径存进去:

alias pipenv="home/pi/.local/bin/pipenv"

注意:我没有像其他人一样整个export进去,因为不知道为什么树莓派里面的zsh使用不来这个。

创建虚拟环境

在某个文件夹创建一个Python3环境:

# 泛指python的版本
$ pipenv --three

# 或者,特指某个python版本
$ pipenv --python 3.5

# 或者,特指某个位置的python
$ pipenv --python 

然后就会显示如下动态,可以看出来,pipenv调用了virtualenv,从本机把Python3环境拷贝一份到某个本机位置,然后在你的项目文件夹里只创建了两个文件PipfilePipfile.lock,记录了所有你这个项目需要的环境配置,内容极其简单易懂:

显示当前虚拟环境的储存位置
$ pipenv --venv
运行环境

运行虚拟环境(无需进入特定shell即可按照该环境运行脚本):

$ pipenv run python xxx.py
进入环境

进入虚拟环境:

# 进入虚拟环境
$ pipenv shell

# 退出虚拟环境
$ exit

其实进入pipenv虚拟环境,本质上就是virtualenvsource ./bin/activate动作,只是使用不一样。进入后,你会发现用deactivate也是能生效的。但是:

注意:进入pipenv环境后千万不要用deactivate退出,而应该用exit退出。否则你再进去这个环境就会产生错误:

Shell for UNKNOWN_VIRTUAL_ENVIRONMENT already activated. 
No action taken to avoid nested environments.
安装packages包
$ pipenv install <包名>

你需要知道的是,进入pipenv虚拟环境后,你还是可以用pip install来安装包的,也能正常使用,因为virtualenv就是这样做的。
但是,这样你就不算使用了pipenv策略了,如果你要在项目文件夹里的Pipfile记录所有项目需要的依赖环境,就应该放弃使用pip install而使用pipenv install,这样你的Pipfile就会精确记录所有需要的依赖。

重新安装所有packages:
有时候需要冲github上clone项目,下载好后,只需要一句话就可以完成创建环境:

# 根据Pipfile中的描述安装所有依赖
$ pipenv install

# 或者,根据Pipfile.lock中的描述安装所有依赖
$ pipenv install --ignore-pipfile

# 或者,只安装dev组的依赖
$ pipenv install --dev

# 或者,根据曾经在pip上导出requirements.txt安装依赖
$ pipenv install -r 
按照树形结构显示当前环境的依赖关系:
$ pipenv graph

然后就会显示出如下效果:

删除虚拟环境:
# 删除某个包
pipenv uninstall <包名>

# 删除整个环境
$ pipenv --rm
pipenv lock时遇到的SSL Error

错误反馈如下:

Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
usr/local/Cellar/pipenv/2018.5.18/libexec/lib/python3.6/site-packages/pipenv/vendor/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/Cellar/pipenv/2018.5.18/libexec/lib/python3.6/site-packages/pipenv/vendor/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/Cellar/pipenv/2018.5.18/libexec/lib/python3.6/site-packages/pipenv/vendor/requests/adapters.py", line 506, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host="pypi.org", port=443): Max retries exceeded with url: /pypi/pyobjc-framework-netfs/json (Caused by SSLError(SSLError(1, u"[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)"),))

参考pipenv的issue解答。

最佳解决方案是:

$ pip install pyopenssl

因为这种SSL Error在其他地方也常见,一般都是没有在环境里安装pyopenssl的问题。所以不管你在哪个环境,如果出现这个SSL问题,就先装pyopenssl解决。
注意:不要用pipenv install pyopenssl,因为你真的不想在每个环境里都重新装一遍这个,干脆把它撞到本机:$ pip install pyopenssl.

常见错误操作 不要在pipenv shell里面运行pipenv install 不要在pipenv shell里面运行deactivate

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41814.html

相关文章

  • Pipenv – 超好用 Python 包管理工具

    摘要:安全,广泛地使用校验,能够自动曝露安全漏洞。部分用来设置仓库地址,部分用来指定项目依赖的包,部分用来指定开发环境需要的包,这样分开便于管理。参考链接新款虚拟环境工具详解笔记使用指南官方推荐的包管理工具 pipenv 是什么 pipenv 是 python 官方推荐的包管理工具,集成了 virtualenv、pyenv 和 pip 三者的功能于一身,类似于 php 中的 composer...

    tunny 评论0 收藏0
  • CentOS 下使用 Pipenv + Gunicorn + Supervisor 部署 Flask

    摘要:根据中华人民共和国信息产业部第十二次部务会议审议通过的非经营性互联网信息服务备案管理办法精神,在中华人民共和国境内提供非经营性互联网信息服务,应当办理备案。未经备案,不得在中华人民共和国境内从事非经营性互联网信息服务。 当我们开发了一个简单的 Flask 程序,想把项目部署上线,我们可以选择传统的部署方式或者云部署方式把项目部署上线。在本文中,笔者将使用 阿里云轻量应用服务器 安装 C...

    anyway 评论0 收藏0
  • Flask Web 测试驱动开发佳实践 之 开篇

    摘要:测试驱动开发简称,是一种软件开发过程中的应用方法,,由极限编程中倡导,以其倡导先写测试程序,然后编码实现其功能得名。测试驱动着整个开发过程首先,驱动代码的设计和功能的实现其后,驱动代码的再设计和重构。 showImg(https://segmentfault.com/img/remote/1460000017081716); 前言 一直都有听到 TDD 测试驱动开发的开发方式,之前看...

    fnngj 评论0 收藏0
  • 比virtuslenv更好用虚拟环境pipenv

    摘要:提示如果你对的用法以及虚拟环境的概念不熟悉的话,可以通过专栏的旧文出发之旅进行简单的认识。为什么使用会自动帮你管理虚拟环境和依赖文件,并且提供了一系列命令和选项来帮助你实现各种依赖和环境管理相关的操作。 什么是Pipenv Pipenv是Kenneth Reitz在2017年1月发布的Python依赖管理工具,现在由PyPA维护。你可以把它看做是pip和virtualenv的组合体,而...

    wing324 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<