• Pipfile 文件转换利器——pipfile-freeze


    Pipfile.lock是用来规定的基础上,目前在包装Pipfile,应该使用那些特定版本,避免依赖于对方,破坏你的项目的依赖关系树自动升级包的风险。

    您可以使用...锁定当前安装的软件包

    pipfile-freeze 是一个将 Pipfile/Pipfile.lock 文件快速转换为
    Requirments 文件格式的命令行工具

    其实在写这个工具之前已有相应的工具问世——pipfile-requirements,该工具的作者 @frostming 也是 pipenv 的维护成员之一,此时你也会发出疑问,既然都有现成的工具了那为什么还要重新造一个轮子呢?其实我并没有在重新造轮子,而是在原有的轮子上做了一些完善。

    为什么需要这个轮子?

    我们知道 Python 的虚拟环境管理工具有很多,不同的工具它的依赖管理方式也不一样,但大部分都会兼容官方 pip 的 Requirments 文件格式。举个栗子,我之前用的 Pipenv 管理了一个项目的虚拟环境,现在改用 conda 来管理,这时为了能把项目所有的依赖安装上,我需要在原来的项目中导出 requirements.txt 文件,然后再通过 conda install --file requirements.txt 来安装所有的依赖。

    另外,Pipenv 在安装依赖的时候是还是比较慢的(很多人也是因为这个才放弃了 Pipenv),如果在我们正式环境部署中也采用 Pipenv 管理的方式,会占用太多的时间,同时也会显得多余,尤其是在采用 docker 方式去部署时。这种情况下我们一般只需提供一份 requirements.txt 文件来告诉持续集成工具或生产服务器应安装哪些依赖包和版本。

    如何从 Pipenv 虚拟环境中导出 requirements.txt

    假设我项目中 Pipfile 是这样的:

    [[source]]
    name = "douban"
    url = "https://pypi.doubanio.com/simple"
    verify_ssl = true
    
    [dev-packages]
    
    [packages]
    pypdf2 = ">=1.17,<=1.23"
    requests = "*"
    
    [requires]
    python_version = "3.7"

    1. 简单暴力法:

    在虚拟环境中直接运行:

    pip freeze > requirements.txt

    得到的结果是:

    certifi==2019.11.28
    chardet==3.0.4
    idna==2.8
    PyPDF2==1.23
    requests==2.22.0
    urllib3==1.25.8

    缺点:

    (1)会把依赖及子依赖都导出,显得冗余;
    (2)得到的是当前环境明确的版本,即不是一个版本范围,有些不需要锁定版本的也被锁定了
    (3)没有导出安装源

    2. 利用 Pipenv 自带的工具导出:

    pipenv lock -r > requirements.txt

    导出结果:

    -i https://pypi.doubanio.com/simple
    certifi==2019.11.28
    chardet==3.0.4
    idna==2.8
    pypdf2==1.23
    requests==2.22.0
    urllib3==1.25.8

    跟方案一差不多,但可以导出安装源

    3. pipfile-requirements 工具转换

    pipfile2req Pipfile > requirements.txt

    输出结果:

    pypdf2<=1.23,>=1.17
    requests

    这下简洁多了,只输出了我们需要的两个依赖,并且有版本范围,可惜的是没有导出安装源呀。

    使用 pipenv-freeze

    pipenv-freeze 工具是在 pipfile-requirements 的基础上优化的,主要有以下改进:

    1. 增加支持安装源的导出;
    2. 增加 -o 参数,直接生成 requirements.txt 文件;
    3. 修改命令名为 pipenv freeze ,主要考虑与 pip freeze 保持一致,更容易理解用途。

    GitHub地址

    安装
    pip install pipfile-freeze

    转换 Pipfile

    上面的栗子中,用 pipenv-freeze 工具导出则是这样的:

    pipfile freeze Pipfile -o

    输出结果

    --index-url https://pypi.doubanio.com/simple
    
    pypdf2>=1.17,<=1.23
    requests

    更多用法

     pipfile freeze --help
    usage: pipfile freeze [-h] [-p PROJECT] [--hashes] [-d] [-o [file]] [file]
    
    positional arguments:
      file                  The file path to convert, support both Pipfile and
                            Pipfile.lock. If it isn't given, will try Pipfile.lock
                            first then Pipfile.
    
    optional arguments:
      -h, --help            show this help message and exit
      -p PROJECT, --project PROJECT
                            Specify another project root
      --hashes              whether to include the hashes
      -d, --dev             whether to choose both develop and default packages
      -o [file], --outfile [file]
                            Output requirements to the file
                            

    参考链接:https://www.jianshu.com/p/b7644a1fb503




    声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作
  • 相关阅读:
    线程死的时候会调用自己的notifyAll方法,join会执行结束。
    NIO中SocketChannel read()返回0的原因
    用bytebuffer进行文件的读写代码段
    java线程池参数含义
    4.3list集合
    4.1、2集合框架介绍
    3.9stingBuffer和stringBuilder
    3.8正则表达式
    3.6、7正则表达式
    3.3、4深度了解字符串
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/14826057.html
Copyright © 2020-2023  润新知