简介
为了避免污染系统环境下的 Python,我们在利用 Python 开发项目时,通常会在项目的根目录创建 python 虚拟环境。
阅读官网文档,python3.6 + 以上,python 自带了 venv 命令可以快速构建虚拟环境,你只需在 Google 中搜索【python3.x venv docs】便可以搜索到对应版本 Python 下,venv 的使用文档。
使用 venv 创建虚拟环境:
- python -m venv venv
这种方式有个问题就是无法创建不同版本的 Python 虚拟环境,比如我系统中只有 python3.7,就无法创建 python3.8 的虚拟环境。
这也是我目前遇到的问题,一些比较新的项目,其要求 python3.8+,而我系统只有 python3.7,此时就需要使用 pipenv 了,先安装一下:
- pip install pipenv
pipenv 基本使用
pipenv 用法比较多,我琢磨了一下,要用好 pipenv,了解起概念和基本用法就好了。
最基本的命令便是创建不同 Python 版本的虚拟环境。
在项目根目录下,运行下面 pipenv 命令:
- pipenv --python 3.8.8
pipenv 会扫描系统中相应的位置,判断 python3.8.8 是否已经有了,如果没有,则自动下载 python3.8.8 并为项目创建 python3.8.8 版本的虚拟环境。
此外,还有一个知识点:
如果项目根目录中有 Pipfile,怎创建虚拟环境时,会根据 Pipfile 中的信息生成虚拟环境,比如安装相应的第三方库,如果没有,怎以默认的形式去生成虚拟环境,然后创建 Pipfile,通过 VsCode 打开 Pipfile,其形式如下:
- [[source]]
- url = "https://pypi.org/simple"
- verify_ssl = true
- name = "pypi"
- [packages]
- numpy = "==1.21.5"
- [dev-packages]
- [requires]
- python_version = "3.8"
- source 用来设置仓库地址,即从哪下载虚拟环境所需要的包
- packages 用来指定项目依赖的包,即你安装了的包
- dev-packages 用来指定开发环境需要的包,这类包只用于开发过程,不用与生产环境,比如单元测试相关的包,只在开发阶段有用,这样分开便于管理。
- requires 中指定目标 Python 版本
pipenv 会默认将虚拟环境安装在 ~/.virtualenvs 中,通过 pipenv --venv 可以直接查看当前项目虚拟环境的路径,如果我们需要使用 PyCharm 编写项目时,可以根据这个目录,直接在 PyCharm 中设置使用该虚拟环境:
pipenv 常规命令如下:
- # 安装命令
- pipenv install requests #在项目所在虚拟环境中安装requests
- pipenv install parsel==1.3.1 #安装parsel并指定其版本
- pipenv install --dev nose2 #安装nose2包并将其关联为只在开发环境中需要的包
- # 卸载命令
- pipenv uninstall requests #在项目所在虚拟环境中卸载requests
- pipenv uninstall --all #从虚拟环境中移除所有已安装的包,但Pipfile.lock文件不受影响
- pipenv uninstall --all--dev #从虚拟环境中卸载所有开发包,并从Pipfile文件中移除这些包
- # 更新命令
- pipenv update requests #在项目中更新requests包
- pipenv update #更新项目中所有的包
- pipenv update --outdated #查看现有包哪些已经过期
- #查看命令
- pipenv graph #显示现有的依赖包
- pipenv lock #更新Pipfile.lock文件锁定当前环境的依赖版本
pipenv shell
在我现在的工作流中,除了使用 pipenv 创建虚拟环境后,pipenv 其他命令都不太使用,因为已经比较熟悉 pip 命令了,不想再去背 pipenv 的命令。
当 pipenv 创建完虚拟环境后,我会通过 pipenv shell,在当前 terminal 中激活虚拟环境,然后直接在其中使用 pip,这样,从 venv 换成 pipenv 几乎没有任何切换成本了,具体的流程为:
- pipenv --python 3.8.8
- pipenv shell
- pip install requests
结尾
好啦,关于 pipenv 了解到这个程度就够用了,至于其他的细节,没遇到问题就不深入研究了,考虑投入产出比嘛。
参考文章:
Pipenv 使用入门