Pipenv - Python包管理工具

Pipenv 工具集pip, Pipfile, virtualenv于一身,是一个非常方便易用的python包 管理工具。

我们知道用Python开发项目或测试项目,Python虚拟环境及包管理很重要。作为Python程序 员如果现在还在直接在系统Python的环境下工作就有些不称职了。

之前Python的包管理没有象npm, yarn这样的优秀包管理工具,现在pipenv终于为大家填上 了这个缺口。

pipenv由著名python包requests的作者开发。它为您的项目创建和管理Python虚拟环境,并通过PipfilePipfile.lock这 两个文件来管理项目中的Python依赖包。

安装

pipenv本身是一个python程序包,安装很简单

$ pip install pipenv

使用

$ cd project1
$ pipenv install --three requests

进入project1项目目录,运行上述命令,在第一次运行pipenv install命令时会为该项目创建了对应的 Python虚拟环境。--three参数指定使用python 3.X作为运行环境的python版本。同时该 命令在project1目录下创建PipfilePipfile.lock两个文件。Pipfile 用于管理项 目的Python包依赖。作为一个例子:requests 表示您为该项目安装requestsPython 包。

Pipfile

PipfilePipfile.lock的发明就是用来取代过于简陋的requirements.txt的。

  • Pipfile是TOML格式的,可以提供更丰富的依赖 包管理信息

  • requirements.txt往往需要为不同的运行环境创建多个文件,比如: test-requirements.txt, dev-requirements.txt等,而Pipfile可以只用一个文件搞定 。目前Pipfile支持两个默认分组的运行环境管理:default和developement,未来可能加入更多的分组。

  • pipenv用Pipfile.lock提供了对所有依赖层级的Python包的版本锁功能

Pipfile例子:

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

[packages]
requests = "*"


[dev-packages]
pytest = "*"

Pipfile.lock例子:

{
    "_meta": {
        "hash": {
            "sha256": "8d14434df45e0ef884d6c3f6e8048ba72335637a8631cc44792f52fd20b6f97a"
        },
        "host-environment-markers": {
            "implementation_name": "cpython",
            "implementation_version": "3.6.1",
            "os_name": "posix",
            "platform_machine": "x86_64",
            "platform_python_implementation": "CPython",
            "platform_release": "16.7.0",
            "platform_system": "Darwin",
            "platform_version": "Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64",
            "python_full_version": "3.6.1",
            "python_version": "3.6",
            "sys_platform": "darwin"
        },
        "pipfile-spec": 5,
        "requires": {},
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "certifi": {
            "hashes": [
                "sha256:54a07c09c586b0e4c619f02a5e94e36619da8e2b053e20f594348c0611803704",
                "sha256:40523d2efb60523e113b44602298f0960e900388cf3bb6043f645cf57ea9e3f5"
            ],
            "version": "==2017.7.27.1"
        },
        "chardet": {
            "hashes": [
                "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691",
                "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
            ],
            "version": "==3.0.4"
        },
        "idna": {
            "hashes": [
                "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4",
                "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f"
            ],
            "version": "==2.6"
        },
        "requests": {
            "hashes": [
                "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b",
                "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"
            ],
            "version": "==2.18.4"
        },
        "urllib3": {
            "hashes": [
                "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b",
                "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
            ],
            "version": "==1.22"
        }
    },
    "develop": {
        "py": {
            "hashes": [
                "sha256:2ccb79b01769d99115aa600d7eed99f524bf752bba8f041dc1c184853514655a",
                "sha256:0f2d585d22050e90c7d293b6451c83db097df77871974d90efd5a30dc12fcde3"
            ],
            "version": "==1.4.34"
        },
        "pytest": {
            "hashes": [
                "sha256:b84f554f8ddc23add65c411bf112b2d88e2489fd45f753b1cae5936358bdf314",
                "sha256:f46e49e0340a532764991c498244a60e3a37d7424a532b3ff1a6a7653f1a403a"
            ],
            "version": "==3.2.2"
        }
    }
}

pipenv常用命令

$ pipenv install [package name]

如果不指定安装具体的python包,则安装Pipfile中所列的python依赖包,否则安装指定 python包并更新Pipfile。可在第一次执行该命令时,使用--three, --two, 或 --python [version or python path] 来指定所创建的python运行环境的python版本。

$ pipenv uninstall [package name]

从虚拟环境中卸载指定的python包并更新Pipfile。如果使用了--all则在虚拟环境中卸载 所有已安装的Python包,但不更新Pipfile。

$ pipenv lock

生成Pipfile.lock 锁定所有的依赖包及其子依赖的版本。

$ pipenv run <python module>

使用虚拟环境中的python运行指定python模块

$ pipenv shell

激活python虚拟环境,之后运行python模块都在该虚拟环境中,需要退出该环境运行 deactivate命令。