让python包管理更可靠

requirements.txt 时代

1. 快且简单的方式

$ cat requirements.txt
Flask

写明要安装的包,通过pip install -r requirements.txt命令将flask及其依赖包全部安装。
这种方式存在一个比较大的风险,若flask包版本有所变动,将导致不同时间install都会有不同的结果。

2. 比较好的方式

$ cat requirements.txt
Flask==0.10.1
Werkzeug==0.11.9
Jinja2==2.8

写明要安装的包及其依赖包并指明版本号,通过这种方式统一版本。

但此时我们想想,好麻烦啊,每次都要去找这么多包的最新版本号。

3. 比较优雅的方式

让我们利用两个文件去管理

  • requirements-to-freeze.txt
  • requirements.txt
  1. 写明要安装的包
$ cat requirements-to-freeze.txt
Flask
  1. 通过pip install requirements-to-freeze.txt安装包及其依赖包
  2. 手动锁定版本,利用pip freeze > requirements.txt记录当前环境所有依赖包及其版本
$ cat requirements.txt
Flask==0.10.1
Werkzeug==0.11.9
Jinja2==2.8

划时代的Pipenv

Pipenv默认使用两个文件对依赖包进行管理:PipfilePipfile.lock
Pipenv已集成了pip及virtualenv这两个工具,此时我们要安装flask,直接运行pipenv install flask,此时已自动在沙箱环境中安装好了flask,并在Pipfile.lock中记录当前环境所有依赖包及其版本。

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

[dev-packages]

[packages]
flask = "*"

[requires]
python_version = "3.5"
$ cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "ace08b0ebaac88893742f5cd0b0488823594b6de62fefdeb29506073fac3d3b3"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "2.7"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "flask": {
            "hashes": [
                "sha256:2271c0070dbcb5275fad4a82e29f23ab92682dc45f9dfbc22c02ba9b9322ce48",
                "sha256:a080b744b7e345ccfcbc77954861cb05b3c63786e93f2b3875e0913d44b43f05"
            ],
            "index": "pypi",
            "version": "==1.0.2"
        },
        "jinja2": {
            "hashes": [
                "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd",
                "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"
            ],
            "version": "==2.10"
        },
        "werkzeug": {
            "hashes": [
                "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c",
                "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b"
            ],
            "version": "==0.14.1"
        }
    },
    "develop": {}
}

很明显,使用Pipenv能节省我们的时间并能帮助我们更合理地管理依赖包。

未完待续.....

你可能感兴趣的:(让python包管理更可靠)