资讯专栏INFORMATION COLUMN

pipenv 更优雅的管理你的python开发环境

dockerclub / 2650人阅读

摘要:可通过以下命令生成文件运行虚拟环境可使用以下命令来运行项目或者启动虚拟环境的环境直接运行并不会出现命令行,是应为没有配置环境变量。

本文最早发布与个人博客:http://www.pylixm.cc

最近常看到pipenv这个管理工具,今天有时间查了下,是 Kennethreitz 大神的作品,看了下github的仓库,是2017年1月份创建的,仅仅一年的时间变获得了7k+的收藏,最新一次的提交时间为2天前,可见该仓库活跃程度。自己之前写过一篇文章《使用 pyenv + virtualenv 打造多版本python开发环境》,遗留个问题,一直没有找到合理的同时管理python和python依赖包的工具,试用了下 pipenv,可以说完美的解决了python版本及包的管理问题。并且pipebv 还是Python.org正式推荐的python包管理工具。原文如下:

</>复制代码

  1. Pipenv — the officially recommended Python packaging tool from Python.org, free (as in freedom).

那么接下来,分享下我的试用过程,供大家参考:

准备工作 试用环境及相关文档

环境

pipenv 9.0.1

python3.6

python2.7

文档

github仓库地址:pipenv

pipenv 官方文档

pipenv 基本概念理解

之前我们使用pip + virtualenv 来管理python依赖包,使用 --python=参数来区分python版本(不再使用pyenv,减少包依赖)。而pipenv的思路简单理解便是把pip和virutalenv 2个工具统一起来,使用 pipenv 来代替。

pipenv 使用 Pipfile 来代替 requirement.txt 文件记录python包。

增加了Pipfile.lock 文件来锁定python软件的包名及版本,以及其依赖关系的列表。

它参考了其他语言的包管理工具(bundler, composer, npm, cargo, yarn, etc.),旨在将最好的包管理工具带入python世界。

pipenv 功能试用 pipenv 安装 普通安装

pipenv 可使用 pip 直接安装。

</>复制代码

  1. pip install pipenv

作者推荐在python3下边安装,会提高与virtualenv的兼容性。

</>复制代码

  1. The use of Python 3 is highly preferred over Python 2, when installing Pipenv. Compatibility with three virtualenvs is greatly improved when using Python 3 as the installation target.
  2. —Kenneth Reitz
用户模式安装

为防止和系统python库产生影响,可使用此种方案安装。

</>复制代码

  1. pip install --user pipenv

pip 默认安装包路径为/usr/local/lib/python2.7/site-packages。此模式下,pip安装包保存路径为用户库路径,一般为/Users/pylixm/Library/Python/3.6/lib/python/site-packages, 可使用命令python3 -m site --user-site 具体查看。如果在安装后你的shell中pipenv不可用,你需要把用户库的二进制目录/Users/pylixm/Library/Python/3.6/bin添加到你的PATH中。

pipenv 使用 初始化虚拟环境

执行pipenv install,创建虚拟环境,如下:

</>复制代码

  1. ~/laboratory/pip_test_project ⌚ 20:42:10
  2. $ pipenv install
  3. Creating a virtualenv for this project…
  4. ⠋New python executable in /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90/bin/python2.7
  5. Also creating executable in /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90/bin/python
  6. Installing setuptools, pip, wheel...done.
  7. Virtualenv location: /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90
  8. Creating a Pipfile for this project…
  9. Pipfile.lock not found, creating…
  10. Locking [dev-packages] dependencies…
  11. Locking [packages] dependencies…
  12. Updated Pipfile.lock (c23e27)!
  13. Installing dependencies from Pipfile.lock (c23e27)…
  14. ? ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
  15. To activate this project"s virtualenv, run the following:
  16. $ pipenv shell

从打印信息可见,它在目录用户目录.local下创建了个和项目同名的虚拟环境(可通过配置环境变量来自定义虚拟环境目录,export WORKON_HOME=~/.venvs),python使用的是默认的python2.7 。
可通过参数--two--three 来泛指python版本,也可通过--python 3.5 来明确知道python版本,但是这些参数的前提是你系统上有此python版本,否则会报如下错误:

</>复制代码

  1. $ pipenv --python 3.5
  2. Warning: Python 3.5 was not found on your system…
  3. You can specify specific versions of Python with:
  4. $ pipenv --python path/to/python

有点像 virtualenv 的 --python参数。

初始化好虚拟环境后,会在项目目录下生成2个文件PipfilePipfile.lock。为pipenv包的配置文件,代替原来的 requirement.txt。项目提交时,可将Pipfile 文件和Pipfile.lock文件受控提交,待其他开发克隆下载,根据此Pipfile 运行命令pipenv install [--dev]生成自己的虚拟环境。

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

安装python模块
正常安装

安装 requests 模块:

</>复制代码

  1. $ pipenv install requests
  2. Installing requests…
  3. Collecting requests
  4. Using cached requests-2.18.4-py2.py3-none-any.whl
  5. Collecting certifi>=2017.4.17 (from requests)
  6. Using cached certifi-2017.11.5-py2.py3-none-any.whl
  7. Collecting idna<2.7,>=2.5 (from requests)
  8. Using cached idna-2.6-py2.py3-none-any.whl
  9. Collecting urllib3<1.23,>=1.21.1 (from requests)
  10. Using cached urllib3-1.22-py2.py3-none-any.whl
  11. Collecting chardet<3.1.0,>=3.0.2 (from requests)
  12. Using cached chardet-3.0.4-py2.py3-none-any.whl
  13. Installing collected packages: certifi, idna, urllib3, chardet, requests
  14. Successfully installed certifi-2017.11.5 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22
  15. Adding requests to Pipfile"s [packages]…
  16. PS: You have excellent taste! ✨ ? ✨
  17. Locking [dev-packages] dependencies…
  18. Locking [packages] dependencies…
  19. Updated Pipfile.lock (2f8679)!

可通过命令pipenv graph 查看已安装模块,同时可查看他们直接的相互依赖情况。

</>复制代码

  1. $ pipenv graph
  2. requests==2.18.4
  3. - certifi [required: >=2017.4.17, installed: 2017.11.5]
  4. - chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4]
  5. - idna [required: >=2.5,<2.7, installed: 2.6]
  6. - urllib3 [required: >=1.21.1,<1.23, installed: 1.22]
只安装开发环境

可通过以下命令,仅安装在开发环境,

</>复制代码

  1. pipenv install --dev requests --three

区别反映在Pipfile 上为:

</>复制代码

  1. [[source]]
  2. url = "https://pypi.python.org/simple"
  3. verify_ssl = true
  4. name = "pypi"
  5. [dev-packages]
  6. [packages]
  7. requests = "*"
  8. flask = "==0.10"
  9. [requires]
  10. python_version = "3.6"

安装包记录是在[dev-packages] 部分,还是[packages] 部分。在安装时,指定--dev参数,则只安装[dev-packages]下的包,若安装时不定指定--dev参数,只会安装[packages] 包下面的模块。

[requires] 下的python在构建新的虚拟环境时,若没有会自动下载安装。

通过 requirements.txt 安装

</>复制代码

  1. pipenv install -r requirements.txt

这样我们可以重用之前的requirement.txt 文件来构建我们新的开发环境,可以把我们的项目顺利的迁到pipenv。

可通过以下命令生成requirements 文件:

</>复制代码

  1. pipenv lock -r [--dev] > requirements.txt
运行虚拟环境

可使用以下命令来运行项目:

</>复制代码

  1. pipenv run python xxx.py

或者启动虚拟环境的shell环境:

</>复制代码

  1. ~/laboratory/pip_test_project
  2. $ pipenv shell --anyway
  3. Spawning environment shell (/bin/zsh). Use "exit" to leave.
  4. source /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90/bin/activate
  5. ~/laboratory/pip_test_project
  6. $ source /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90/bin/activate
  7. (pip_test_project-MXA0TC90)
  8. ~/laboratory/pip_test_project
  9. $ exit
  10. ~/laboratory/pip_test_project
  11. $ pipenv shell
  12. Shell for UNKNOWN_VIRTUAL_ENVIRONMENT already activated.
  13. No action taken to avoid nested environments.

直接运行pipenv shell 并不会出现shell命令行,是应为没有配置环境变量。还需要进一步研究,貌似需要配置环境变了,一直没找到。

pipenv 提供了.env 文件,放在项目目录下,提供项目所需的环境变量,运行pipenv shell 时,会自动加载。

删除虚拟环境及包

删除包:

</>复制代码

  1. pipenv uninstall reuqests

删除虚拟环境:

</>复制代码

  1. pipenv --rm
总结

pipenv 完美的解决了python的包和版本的管理。

并对包之间的依赖关系也管理起来,方便了开发者构建自己的开发运行环境。

时间有限,以上列举的仅为部分功能,更多的强大功能详见官方文档。

参考

https://docs.pipenv.org/

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

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

相关文章

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

    摘要:的把最新型最先进的虚拟环境吵得火热。进入后,你会发现用也是能生效的。但是注意进入环境后千万不要用退出,而应该用退出。最佳解决方案是因为这种在其他地方也常见,一般都是没有在环境里安装的问题。 2018的PyCon把最新型最先进的Python虚拟环境pipenv吵得火热。看了下介绍感觉真的很好用,它在virtualenv的基础上包装了一些更便捷的功能,解决了很多很多virtualenv欠缺...

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

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

    anyway 评论0 收藏0
  • 初见Flask

    摘要:接收用户请求并分析请求的。执行函数并生成响应,返回给浏览器。这个过程我们称为注册路由,路由负责管理和函数之间的映射,而这个函数则被称为视图函数。文件是一个名为的文本文件,它存储了项目中提交时的忽略文件规则清单。 flask简述 Flask 是一个基于 Python 开发并且依赖 jinja2 模板和 Werkzeug WSGI 服务的一个微型框架,对于 Werkzeug 本质是 Soc...

    tomorrowwu 评论0 收藏0
  • 使用pipenv代替virtualenv管理python

    摘要:前言第一次接触到是因为看到董明伟大神的使用管理你的项目,之前可能和大家的选择类似使用或者来管理的包环境。是针对的包的多版本管理,通过将包安装到一个模块来作为的包虚拟环境,通过切换目录来实现不同包环境间的切换。 前言 第一次接触到 pipenv 是因为看到@董明伟大神的《使用pipenv管理你的项目》,之前可能和大家的选择类似使用 virtualenv 或者 pyenv 来管理 pyth...

    whidy 评论0 收藏0

发表评论

0条评论

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