欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pipenv的安装和使用

程序员文章站 2022-06-16 09:24:58
...

pipenv的安装和使用

参考:

Pipenv使用入门 - 简书 (jianshu.com)

介绍

pipenv官方文档

Python的虚拟环境管理工具:最常用的便是virtualenv,virtualenvwrapper,pipenv这几种虚拟环境的管理都是基于virtualenv,只是做了不同的封装,达到了更好的效果。

  • virtualenv ,此工具会在项目目录下创建一个文件夹,名字叫做virtualenv_name,此目录下会包含python拷贝,之后所有的依赖都会保存至此目录中,在虚拟环境**状态下,可以安装所需的依赖包,安装的依赖包会保存至项目虚拟环境目录virtualenv_name 下,不会污染系统全局环境;
    • 缺点:
      • 可能需要手动安装/删除某些特定版本的包
      • 要定期更新 requirements.txt,保持项目环境的一致性
      • 会保留两个版本 requirements.txt,一个用于开发,一个用于生产环境,导致更多复杂性
  • virtualenvwrapper ,virtualenvwrapper是对virtualenv接口的封装。virtualenvwrapper会将虚拟环境的目录统一保存,不需手动管理,使用起来更加便利;
  • pipenv ,pipenv是Kenneth Reitz在2017年1月发布的Python依赖管理工具,现在由PyPA维护。你可以把它看做是pip和virtualenv的组合体,而它基于的Pipfile则用来替代旧的依赖记录方式(requirements.txt),pipenv 在易用性上要简单很多,同时增加了 lock 文件,能更好的锁定版本。如果没有特殊要求可以 pipenv 直接使用 lock 的版本,开发又可以小步迭代,实现依赖的稳步升级。
    • 实现同时管理项目中的python虚拟环境和相关包依赖

pipenv的优势

  • pipenv会在项目目录下创建 PipfilePipfile.lock 文件,管理包之间的依赖关系,以前我们需要将虚拟环境依赖包的导出为requirements.txt, 一旦依赖包变动,就要重新导出,现在Pipfile和Pipfile.lock文件可以节省这些步骤,更方便地管理;
  • 安装卸载包无需**虚拟环境直接在项目文件夹下操作
  • 卸载时,自动检查依赖库是否被其他包依赖,来选择是否彻底删除。
  • 无需**虚拟环境执行代码,只要有pipfile文件通过 pipenv run python xx.py
  • 便于docker容器化管理,Pipfile文件支持生成requirements文件,便于项目代码docker化管理,另外,pipfile还支持–dev环境,可以在调试阶段安装许多调试工具等,而不影响生产环境的环境。
  • 各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。
  • 通过加载.env文件简化开发工作流程

安装

Anaconda Prompt 或者 cmd 输入 -> pip install pipenv

检测安装是否成功:pipenv --version

预览一下pipenv的用法 pipenv --help

创建环境

  1. 创建环境 pipenv install & pipenv shell 【直接在地址行输入cmd 或者 pipenv shell】

    使用pipenv install & pipenv shell 区别

    pipenv install需要在DOS界面下操作,在命令提示符前面显示虚拟环境名字后,才算进入环境

    pip shell可以在地址行直接输入,**anaconda的pipenv工具,一步到位进入虚拟环境,没有anaconda时可能不能用

    (WeiBoImageCrawling-rDB0ue93) F:\Ccode\WeiBoImageCrawling>pipenv install
    Creating a virtualenv for this project…
    Pipfile: F:\Ccode\WeiBoImageCrawling\Pipfile
    Using C:/Users/流年/AppData/Local/Programs/Python/Python37-32/python.exe (3.7.4) to create virtualenv…
    [    ] Creating virtual environment...created virtual environment CPython3.7.4.final.0-32 in 2272ms
      creator CPython3Windows(dest=C:\Users\流年\.virtualenvs\WeiBoImageCrawling-rDB0ue93, clear=False, global=False)
      seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\流年\A
    ppData\Local\pypa\virtualenv)
        added seed packages: pip==20.2.4, setuptools==50.3.2, wheel==0.36.2
      activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
    
    Successfully created virtual environment!
    Virtualenv location: C:\Users\流年\.virtualenvs\WeiBoImageCrawling-rDB0ue93
    Installing dependencies from Pipfile.lock (a65489)…
      ================================ 0/0 - 00:00:00
    
    
    • 上述命令会生成PipfilePipfile.lock,自动生成一个随机的虚拟环境目录名[项目名称+随机字符]。

      • Pipfile:用于保存项目的python版本、依赖包等相关信息

        Pipfile文件可以单独移放到其他项目内,用于项目虚拟环境的建立和依赖包的安装

      • Pipfile.lock:用于对Pipfile的锁定

    • pipenv install

      Pipfile 文件

      • 目录中存在,根据这个Pipfile生成虚拟环境。

      • 目录中不存在,该命令将创建一个 Pipfile 文件。

      若项目目录中虚拟环境已创建且有Pipfile文件,将根据Pipfile文件来安装依赖包

    • windows下执行命令,生成的虚拟环境在C:\Users\用户名.virtualenvs文件夹下

    • 一般虚拟环境目录名:创建环境时所在的项目目录名 + 随机字符串,eg:myblog-Gtn4e1q9

    解析pipfile文件

    [[source]]
    name = "pypi"
    url = "https://pypi.org/simple"
    verify_ssl = true
    
    [dev-packages]
    
    [packages]
    
    [requires]
    python_version = "3.7"
    
    [scripts]
    test = "python3 -m unittest discover -s ./tests"
    dev = "python3 manage.py runserver 0.0.0.0:8000"
    
    
    • source用来设置仓库地址,即从哪下载虚拟环境所需要的包

      • 可手动修改url为,为自己想用的源
    • packages用来指定项目依赖的包,可以用于生产环境和生成requirements文件

    • dev-packages用来指定开发环境需要的包,这类包只用于开发过程,不用与生产环境,比如单元测试相关的包,只在开发阶段有用,这样分开便于管理。安装调试工具、性能测试工具、python语法工具

    • requires 中指定目标Python版本

    • [scripts]添加自定义的脚本命令,并通过 pipenv run 的方式在虚拟环境中执行对应的命令:

      pipenv run test 相当于执行 pipenv run python3 -m unittest discover -s ./tests

      pipenv run dev 相当于pipenv run python3 manage.py runserver 0.0.0.0:8000

    解析pipfile.look文件

    • Pipfile.lock中记录了当前虚拟环境中安装的依赖的版本号以及哈希,以保证每次根据这些值装出来的依赖都是一致的,该文件用来保证包的完整性。记住,任何情况下不要手动修改该文件!

    • 项目提交时,可将Pipfile 文件和Pipfile.lock文件一并提交,给其他开发人员克隆下载,他们可以根据此Pipfile文件运行命令pipenv install生成自己的虚拟环境。

    指定虚拟环境 Python版本

    pipenv --python 3.6 #指定使用Python3.6的虚拟环境
    pipenv --two        #使用系统的Python2在创建虚拟环境
    pipenv --three      #使用系统的Python3在创建虚拟环境
    
    #注意:以上三个参数只能单独使用。它们还具有破坏性,会删除当前的虚拟环境,然后用适当版本的虚拟环境替代。
    
    • 当给定了一个Python版本的时候,Pipenv会自动扫描系统中能够匹配给定的Python版本的Python解释器,没指定版本时,使用系统默认的Python版本。

    虚拟环境中运行代码

    1. **环境 pipenv shell

      • 创建环境后会自动进入到虚拟环境中,当退出虚拟环境重新进入到虚拟环境则需要执行以上命令

      • 执行完命令,命令提示符前出现了如**(TestPipenv-tmf99lpc)**的虚拟环境的名字,代表进入了虚拟环境

      • 虚拟环境中的,python版本、pip、第三方库,都不会与系统中的库冲突

    2. 在虚拟环境中运行代码项目 python xxx.py eg:

      (WeiBoImageCrawling-rDB0ue93) F:\Ccode\WeiBoImageCrawling>python xxx.py
      xxx.py 运行...
      
    3. 不进入虚拟环境的情况下使用虚拟环境运行代码,可以使用pipenv run python xxx.py命令,eg:

      F:\Ccode\WeiBoImageCrawling>pipenv run python xxx.py
      xxx.py 运行...
      

pipenv 管理Python包

  • 安装依赖包到虚拟环境

    • pipenv install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
    • pipenv install parsel==1.3.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/
    • 安装nose2包并将其关联为只在开发环境中需要的包
      • pipenv install --dev nose2 -i https://pypi.tuna.tsinghua.edu.cn/simple/

    --dev标志,此标志的包只用于开发环境,安装包记录在Pipfile中的dev-package

    克隆Profile文件后使用命令pipenv install创建虚拟环境,默认不会安装dev-package下的安装包,除非使用命令pipenv install --dev

    PipefilePipefile.lock都会按照你的操作进行自动更新,如果需要手动修改包的依赖条件,手工编辑 Pipefile 并进行安装即可。

    注意:强烈建议使用双引号包裹包名和版本号以避免unix操作系统中的输入和输出重定向问题
    pipenv install requests 		   	    		# 不指定版本
    pipenv install requests==2.31 					# 指定版本
    pipenv install --dev requests 					# 在dev开发环境安装测试包(可以加–skip-lock参数)
    pipenv install “requests>=1.4” 					# 只安装等于或者大于 1.4.0 的版本
    pipenv install “requests<=2.13” 				# 只安装小于或者等于 2.13.0 的版本
    pipenv install “requests>2.19” 					# 安装 2.19.1 版本但是不安装 2.19.0 版本
    pipenv install “requests!=2.19”					# 避免安装某个版本
    pipenv --site-packages                 			# 加载系统已安装 Python 包
    pipenv install package_name --skip-lock		 	# 跳过lock,等项目开发好后,再更新所有报的hash值
    pipenv install -r path/to/requirements.txt	 	#导入某个requirements文件
    pipenv install “requests~=2.2” 					# 锁定包的主版本(这相当于使用2.*)
    
    请优先使用 ~= 标识符而不是 == 标识符,因为后者会阻止 pipenv 更新包
    安装完成后,会在Pipfile文件中看到
    
  • 卸载

    pipenv uninstall beautifulsoup4 #在项目所在虚拟环境中卸载beautifulsoup4
    pipenv uninstall --all          #从虚拟环境中移除所有已安装的包,但Pipfile.lock文件不受影响
    pipenv uninstall --all--dev     #从虚拟环境中卸载所有开发包,并从Pipfile文件中移除这些包
    
  • 更新命令

    pipenv update requests          #在项目中更新requests包
    pipenv update                   #更新项目中所有的包
    pipenv update --outdated        #查看现有包哪些已经过期
    
  • 查看命令

    pipenv --where 					#查看项目位置
    pipenv --venv   				#查看虚拟环境位置
    pipenv --py  					#查看解释器信息
        
    pipenv graph                    #显示现有的依赖包/包的依赖结构/已安装的模块
    pipenv list						#查看已安装的包
    pipenv lock                     #更新Pipfile.lock文件锁定当前环境的依赖版本
    exit							#退出虚拟环境 
    
  • 删除虚拟环境 pipenv --rm

    • 实践发现:同一项目目录,多次增删虚拟环境,虚拟环境的名字不变,或者说内存空间不变
  • 其他命令 pipenv -h

    Options:
      --where                         Output project home information.
      --venv                          Output virtualenv information.
      --py                            Output Python interpreter information.
      --envs                          Output Environment Variable options.
      --rm                            Remove the virtualenv.
      --bare                          Minimal output.最小输出?
      --completion                    Output completion (to be executed by the
                                      shell).
    
      --man                           Display manpage. 显示手册页。
      --support                       Output diagnostic information for use in
                                      GitHub issues.使用GitHub时,输出诊断信息
    
      --site-packages / --no-site-packages
                                      Enable site-packages for the virtualenv.
                                      [env var: PIPENV_SITE_PACKAGES]
    
      --python TEXT                   Specify which version of Python virtualenv
                                      should use.
    
      --three / --two                 Use Python 3/2 when creating virtualenv.
      --clear                         Clears caches (pipenv, pip, and pip-tools).
                                      [env var: PIPENV_CLEAR] 清除缓存
    
      -v, --verbose                   Verbose mode. 详细模式
      --pypi-mirror TEXT              Specify a PyPI mirror. 指定PyPI镜像
      --version                       Show the version and exit.
      -h, --help                      Show this message and exit.
    
    
    Usage Examples:
       Create a new project using Python 3.7, specifically:
       $ pipenv --python 3.7
    
       Remove project virtualenv (inferred from current directory):
       $ pipenv --rm
    
       Install all dependencies for a project (including dev):
       $ pipenv install --dev
    
       Create a lockfile containing pre-releases:创建包含预发行版本的锁定文件:
       $ pipenv lock --pre
    
       Show a graph of your installed dependencies:
       $ pipenv graph
    
       Check your installed dependencies for security vulnerabilities:检查已安装的依赖项是否存在安全漏洞:
       $ pipenv check
    
       Install a local setup.py into your virtual environment/Pipfile:将本地setup.py安装到虚拟环境
       $ pipenv install -e .
    
       Use a lower-level pip command:使用较低级别的pip命令
       $ pipenv run pip freeze
    
    Commands:
      check      Checks for PyUp Safety security vulnerabilities and against PEP
                 508 markers provided in Pipfile.
    
      clean      Uninstalls all packages not specified in Pipfile.lock.
      graph      Displays currently-installed dependency graph information.
      install    Installs provided packages and adds them to Pipfile, or (if no
                 packages are given), installs all packages from Pipfile.
    
      lock       Generates Pipfile.lock.
      open       View a given module in your editor.
      run        Spawns a command installed into the virtualenv.
      shell      Spawns a shell within the virtualenv.
      sync       Installs all packages specified in Pipfile.lock.
      uninstall  Uninstalls a provided package and removes it from Pipfile.
      update     Runs lock, then sync.
    
    
    $ pipenv
    Usage: pipenv [OPTIONS] COMMAND [ARGS]...
    
    命令具有以下选项
    Options:pipenv
      --update         更新Pipenv & pip
      --where          显示项目文件所在路径
      --venv           显示虚拟环境实际文件所在路径
      --py             显示虚拟环境Python解释器所在路径
      --envs           显示虚拟环境的选项变量
      --rm             删除虚拟环境
      --bare           最小化输出
      --completion     完整输出
      --man            显示帮助页面
      --three / --two  使用Python 3/2创建虚拟环境(注意本机已安装的Python版本)
      --python TEXT    指定某个Python版本作为虚拟环境的安装源
      --site-packages  附带安装原Python解释器中的第三方库
      --jumbotron      不知道啥玩意....
      --version        版本信息
      -h, --help       帮助信息
    
    
    可使用的命令参数:
    Commands: 
      check      检查安全漏洞
      graph      显示当前依赖关系图信息
      install    安装虚拟环境或者第三方库
      lock       锁定并生成Pipfile.lock文件
      open       在编辑器中查看一个库
      run        在虚拟环境中运行命令
      shell      进入虚拟环境
      uninstall  卸载一个库
      update     卸载当前所有的包,并安装它们的最新版本
    
    
    

pyinstaller打包生成 .exe

  • 安装 pyinstaller

    pipenv install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/

  • 打包命令

    pyinstaller -F <入口.py>

    -F					打包成可执行文件
    -w (小写)			   不显示命令行窗口
    

    eg: pyinstaller -F E:/tf/lab.8.1-huffman-coding/byteSourceCoder.py

兼容virtualenv

  • pipenv可以像virtualenv一样使用命令生成requirements.txt文件

    pipenv lock -r --dev > requirements.txt

  • 同样的,也可以像virtualenv一样通过requirements.txt文件安装包

    pipenv install -r requirements.txt

    这个命令让我们可以重用以前requirements.txt文件来构建我们新的开发环境,把我们的项目顺利的迁到pipenv。

pipenv install语法与pip install完全兼容

pip的基本使用

pip install <包名> 						#安装,自动下载到Python的Lib>site-packages目录
pip uninstall <包名>						#卸载
pip freeze								 #查看已安装的包及其版本
pip list -o			   					 #查看可升级的包
pip install -U <包名>					    #升级指定包
python -m pip install --upgrade pip 	 #升级pip