Windless
订阅/Feed
稗田千秋(i@wind.moe)

更好用的依赖管理工具 pipenv

稗田千秋
Jan.22 2018 code

之前写项目时总觉得 python 的依赖管理工具还是过简了,较为常见的写法就是 pip + virtualenv,能较为方便快捷的创建一个虚拟环境用于开发,但是其他语言的依赖管理工具已经有了极大发展,比如 NodeJS 的 yarn,那种方便的感觉不可同语。

requirements.txt 文件是在是太过简陋了,执行 pip freeze > requirements.txt 会把所有的依赖都写入文件,就像安装 a 库需要依赖 b 和 c,执行后 a、b、c 都会写入文件,导致这个文件太过繁琐且不直观,甚至需要手动去修改。同时还有许多弱点,比如无法很好地区分开发环境生产环境所需的依赖。

那么有没有一款...当然有,Kenneth Reitz 的 pipenv 项目就是最好的选择,它结合了 pip 和 virtualenv 两者,借鉴了其他语言包管理工具的特性,给 Python 提供了更为便捷的依赖管理工具。

基础使用

安装 pipenv

可以使用 pip 直接安装,只需要执行

pip install pipenv

即可,推荐安装在用户目录避免涉及权限等问题

安装包

执行

pipenv install

会使用该目录下的 Pipfile 中的依赖项进行安装(类似 pip install -r requirements.txt),如果不存在 Pipfile 文件,则会创建一个不带任何依赖的空 Pipfile 文件,也可以选择将原有的 requirements.txt 文件自动转换成 Pipfile 文件(pipenv install -r path/to/requirements.txt),如果不存在对应虚拟环境,也会先创建一个该项目的虚拟环境,

要安装新的包,与 pip 的使用方法类似

pipenv install aiohttp

这会将包安装在生产环境的选项下,如果仅在开发环境需要,加上 --dev 即可。

卸载也基本相似,将 install 替换为 uninstall 即可。

Pipfile 和 Pipfile.lock

Pipfile 使用 TOML 格式,一种简洁的配置文件格式,比起 requirements.txt 提供了更为明了的内容以及更多配置选项(请参考 文档)。

默认格式类似

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]
aiohttp = "*"


[dev-packages]
pytest = "*"

你可以在文件中修改或增加一个新的源,而不去修改系统本身的设置,可以参考 specifying-package-indexes

Pipfile.lock 类似 package-lock.json 起版本锁的作用,根据 Pipfile 和当前环境生成对应的文件,这样当重复构建的时候不会因为各种外部原因导致依赖的不兼容或各种问题。

虚拟环境

进入 REPL

执行如下命令可以进入初始化项目时创建的虚拟环境, 类似于执行 source path/to/active

pipenv shell

运行文件

执行

pipenv run [command]

则会在虚拟环境中运行之后的指令,比如可以在虚拟环境中运行一个py文件

pipenv run python main.py

以上,更多的详细用法还是参考官方文档吧,本文仅供参考。

--END--
文章创建于 2018-01-22 03:11:49,最后更新 2018-01-22 03:11:49
Comment
尝试加载Disqus评论, 失败则会使用基础模式.
    • play_arrow

    About this site

    version:1.02 Alpha
    博客主题: Lime
    联系方式: i@wind.moe
    写作语言: zh_CN & en_US
    博客遵循 CC BY-NC-SA 4.0许可进行创作

    此外,本博客会基于访客的Request Headers记录部分匿名数据用于统计(Logger的源码见Github),包含Referer, User-Agent & IP Address.个人绝不会主动将数据泄露给第三方