python虚拟环境使用详解

目录

1、虚拟环境

1.1、基本概念

1.2、作用

2、pip+virtualenv

2.1、安装virtualenv

2.2、创建虚拟环境

2.3、激活虚拟环境

2.4、pip 安装/卸载所需的依赖包

2.5、退出/切换/删除虚拟环境

2.6、虚拟环境迁移打包

2.6.1、打包

2.6.2、迁移

2.7、使用国内镜像源安装

2.7.1、临时使用

2.7.2、设置国内源为默认源

2.7.3、配置多个镜像源

3、pip+venv

4、pipenv

4.1、安装pipenv

4.2、创建虚拟环境

4.3、安装所需的依赖包

4.4、项目发布生产环境

4.5、管理依赖冲突

4.6、删除依赖包

4.7、其他命令

5、poetry

5.1、poetry安装

5.1.1、Linux, macOS, Windows (WSL)

5.1.2、Windows (Powershell)

5.2、poetry创建新的项目

5.3、已有项目添加poetry管理

5.3.1、创建pyproject.toml文件

5.3.2、创建虚拟环境

5.3.3、激活虚拟环境

5.3.4、退出虚拟环境

5.3.5、管理虚拟环境

5.4、安装所需要的依赖

5.4.1、安装指定依赖

5.4.2、为项目安装全部依赖

5.4.3、给项目添加国内源

5.5、管理依赖冲突

5.6、poetry config配置

5.6.1、基本认识

5.6.2、poetry config 的使用

5.7、Pycharm中使用poetry

1、虚拟环境

1.1、基本概念

  • Venv:虚拟环境,是Python用来创建和管理虚拟环境的模块,该模块供你用来存放你的Python脚本以及安装各种Python第三方模块,模块里的环境和本机是完全分开的,也就是说你在venv下通过pip安装的Python第三方模块是不会存在于你本机的环境下的。

1.2、作用

  • Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpreter,而不用与其他Python程序共享统一个library和interpreter。虚拟环境的好处是避免了不同Python程序间的互相影响(共同使用global library 和 interpreter)
  • 例如:程序A需要某个库的2.0版本,而程序B需要同样这个库的3.0版本,如果没有虚拟环境的话,我们本地只能有这个库的一种版本,如果程序B执行,代表本地安装的3.0版本的库,A就不能成功执行了。

2、pip+virtualenv

2.1、安装virtualenv

pip install virtualenv

2.2、创建虚拟环境

  • 1、命令行(cmd)进入当需要创建虚拟环境的目录下
  • 2、执行命令创建虚拟环境env_demo

virtualenv env_demo

python -m virtualenv env_demo

2.3、激活虚拟环境

  • 1、进入到当前创建虚拟目录的\env_demo\Scripts下
  • 2、执行命令激活虚拟环境

source activate # Linux

activate # windows

2.4、pip 安装/卸载所需的依赖包

  • 此时安装的包在当前的虚拟环境中
  • 示例:安装yaml的包,执行命令:pip install pyyaml

pip install pyyaml

  • 卸载包执行命令:pip uninstall 包名

2.5、退出/切换/删除虚拟环境

  • 若要切换/删除虚拟环境,需先退出虚拟环境,再切换进入到虚拟环境/删除虚拟环境
  • 执行命令退出虚拟环境

deactivate

  • 执行命令删除虚拟环境

rm -r venv_demo # Linux

rmdir /s/q env_demo # windows

2.6、虚拟环境迁移打包

2.6.1、打包

  • 将安装包版本信息导入到requireents.txt文件中,注意 --all 参数,加上此参数会将setuptools、urllib3包进行打包;如果不加,这两个不会打包

pip freeze --all > requirements.txt

2.6.2、迁移

  • 进入到虚拟环境,执行命令安装环境依赖包

pip install -r requirements.txt

2.7、使用国内镜像源安装

2.7.1、临时使用

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

2.7.2、设置国内源为默认源

  • 注:升级 pip 到最新的版本后进行配置:

python -m pip install --upgrade pip
# 如果pip 默认源的网络连接较差,临时使用本镜像站来升级 pip
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

2.7.3、配置多个镜像源

  • 如果想配置多个镜像源平衡负载,可在已经替换 index-url 的情况下通过以下方式继续增加源站,注意:源地址之间需要有空格

pip config set global.extra-index-url "<url1> <url2>..."

3、pip+venv

  • 说明:venv模块是python3.3之后内置的一个虚拟环境管理模块,无需额外安装,可以直接使用,使用方式基本同pip+virtualenv(可以直接略去安装的步骤),创建虚拟环境(python -m venv env_demo)
  • 不足:
    • pip的问题在于它负责安装依赖项,但之后却不负责。如:使用pip安装django,它将安装sqlparse和asgiref。但是,如果之后卸载django,这两个额外的包将被保留而不会被删除。
    • pip也不区分开发环境和生产环境。因此,可能希望在开发过程中访问开发人员工具,例如black或pytest。在生产服务器上安装它们充其量是不必要的,最坏的情况是有害的。
    • 当两个第三方包有冲突的依赖关系时,pip没有提供解决这些问题的方法。
    • pip不负责管理requirements.txt。一些开发人员只要安装了新的依赖项就使用pip freeze > requirements.txt。但是,这是不可取的,因为它会包含子依赖项,从而使上述问题恶化。
  • 解决方案
    • pipenv

4、pipenv

4.1、安装pipenv

pip install pipenv

  • 一旦安装完成就会引用两个文件,Pipfile和Pipfile.lock。前者是用于取代requirements.txt文件的,后者则是用于保证依赖库的确定性和一致性。
  • 本质上,pipenv命令底层也是封装了pip和venv的操作,并提供了一套简单的交互命令。
  • Pipfile:这个文件记录了项目的依赖包信息,包括项目所需的Python版本和各个依赖包的版本。它类似于传统的requirements.txt文件,但提供了更多的功能和灵活性。

  • Pipfile.lock:这个文件记录了依赖包的详细信息,包括包名称、版本以及依赖关系,并且使用哈希算法生成了依赖包的哈希值,以确保包的完整性和一致性。这使得在不同环境中安装依赖时,能够确保安装的是完全相同的包版本,避免了版本冲突等问题。

4.2、创建虚拟环境

  • 默认创建,并默认激活虚拟环境

pipenv shell

  • 还可以使用--two或--three参数指定使用Python2还是Python3来创建,也可以使用确定的Python版本号如--python3.7

pipenv shell --three
pipenv shell --python3.9

  • 创建完成,同时在项目目录下生成虚拟环境文件和Pipfile文件
  • Pipfile文件内容格式如下:

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

[packages]

[dev-packages]

[requires]
python_version = "3.9"

4.3、安装所需的依赖包

  • 如果项目已有Pipfile和Pipfile.lock文件(为已有项目安装依赖)
    • 打开命令行工具,切换到包含Pipfile和Pipfile.lock文件的项目目录。
    • 在项目目录下执行pipenv install命令。pipenv会首先检查Pipfile和Pipfile.lock文件,然后根据这些文件中记录的信息安装项目所需的依赖包。如果Pipfile.lock文件存在,pipenv会尽量确保安装与lock文件中记录的完全相同的包版本。

pipenv install

说明:安装依赖包时会在项目目录生成了另一文件Pipfile.lock,并且Pipfile文件也会更新

  • 安装方式

pipenv install 包名

  • 示例:安装pyyaml

pipenv install pyyaml
或指定版本安装
pipenv install pyyaml==6.0

  • 使用--dev参数用于安装开发环境依赖的库
    • [dev-packages]是用于标示开发版本依赖库,这样可以用于区分生产环境和开发环境。只有在命令中使用了--dev参数才会安装[dev-packages]下列出的依赖库。

pipenv install pytest --dev

  • Pipfile.lock文件内容,主要是包含了依赖库(包括子依赖库)的版本号以及文件hash的信息,从而可以保证依赖库是确定的。

4.4、项目发布生产环境

  • 把项目发布到生产环境,使用pipenv lock命令

pipenv lock

  • 开发环境中恢复环境使用以下命令

pipenv install --ignore-pipfile

  • --ignore-pipfile参数表示:只恢复Pipfile.lock的列表的依赖库和子依赖库
  • 如果要恢复开发环境中的依赖库,即安装[dev-packages]下面的依赖库,可以使用

pipenv install --dev

4.5、管理依赖冲突

  • 查看当前项目依赖库及其子依赖库信息,以树层级方式进行展示

pipenv graph

  • pipenv graph命令展示了它们各自需要的依赖。还可以加上--reverse参数,使用这个参数可以很方便的分析出冲突的库。

pipenv graph --reverse

当安装包发送依赖冲突时,可以通过升级或降级已安装的包来解决冲突,或者通过手动编辑 Pipfile.lock 文件来指定特定版本的依赖包。

4.6、删除依赖包

  • 删除某个特定的依赖包

pipenv uninstall 包名

  • 删除所有依赖库
    • --all-dev是指定删除所有开发环境的依赖。

pipenv uninstall --all
pipenv uninstall --all-dev

4.7、其他命令

  • 查看venv目录路径

pipenv --venv

  • 查看当前项目路径

pipenv --where

5、poetry

明:Poetry是Python中的依赖管理和打包工具。 它允许你声明你的项目所依赖的库,它将为你管理(安装/更新)它们。 Poetry提供了一个锁文件来确保可重复安装,并可以构建您的项目以供分发。可完成虚拟环境管理、依赖包管理、打包pip项目

官网:Introduction | Documentation | Poetry - Python dependency management and packaging made easy

支持Python版本:Python 3.7+

5.1、poetry安装

5.1.1、Linux, macOS, Windows (WSL)

  • 1、执行脚本安装

curl -sSL https://install.python-poetry.org | python3 -

  • 2、添加poetry路径到系统环境变量中
    • Linux/Unix:~/.local/share/pypoetry/venv/bin/poetry
    • MacOS:~/Library/Application Support/pypoetry/venv/bin/poetry
    • Windows:%APPDATA%\pypoetry\venv\Scripts\poetry

5.1.2、Windows (Powershell)

  • 1、打开系统的Windows Powershell
  • 2、执行安装命令

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

  • 3、添加poetry路径到系统环境变量中

5.1.3、检查是否安装成功

  • 使用以下命令查看poetry是否安装成功,出现版本号说明安装成功

poetry --version

  • 配置系统环境变量后,在其他路径下使用poetry,提示找不到命令,可重启电脑解决

5.2、poetry创建新的项目

说明:可以使用poetry创建新项目的脚手架,命令如下:

poetry new projectName

创建项目结构如下:

5.3、已有项目添加poetry管理

5.3.1、创建pyproject.toml文件

  • 在已有的项目使用执行poetry init 命令来创建一个pyproject.toml文件

poetry init

  • 可看到有很多提示输入,不确定的内容就先按下Enter使用默认值,后续可以再修改pyproject.toml文件。 指定依赖的环节也可以跳过,后续再安装会更加高效。

5.3.2、创建虚拟环境

  • 利用 virtualenvs.create=true 自动创建
    • 当参数 virtualenvs.create=true 时,执行 poetry install 或 poetry add 时会检测当前项目是否有虚拟环境,没有就自动创建。
    • 注意:如果系统中既有Python2又有Python3,且项目既支持Python2也支持Python3,那poetry会优先使用Python2。
      • 创建虚拟环境时指定使用的Python解释器版本
        • 命令:poetry env use python 【注:此处的Python版本一定是可执行的Python版本】

5.3.3、激活虚拟环境

1、执行poetry不需要激活虚拟环境,poetry会自动检测当前的虚拟环境,在当前的目录对应的虚拟环境中执行 命令如下:

poetry run conmand
eg: poetry run python demo.py

2、显示激活虚拟环境

poetry shell

5.3.4、退出虚拟环境

  • 1、不退出当前shell使用:deactivate
  • 2、退出当前的shell使用:exit

5.3.5、管理虚拟环境

1、列出当前项目关联的所有虚拟环境

poetry env list

2、获取有关当前激活的虚拟环境的基本信息

poetry env info

3、删除虚拟环境

示例:可以使用以下几种方式删除
poetry env remove /full/path/to/python
poetry env remove python3.7
poetry env remove 3.7
poetry env remove test-O3eWbxRl-py3.7

4、一次删除多个环境

poetry env remove python3.6 python3.7 python3.8

5、一次性删除所有虚拟环境

poetry env remove --all

5.4、安装所需要的依赖

5.4.1、安装指定依赖

1、安装最新版本的包
poetry add package

2、安装最新包指定为开发依赖,会写到pyproject.toml中的[tool.poetry.dev-dependencies]
poetry add package --dev

3、安装指定版本
poetry add package=1.0.0

5.4.2、为项目安装全部依赖

安装命令:

1、安装poetry.lock(如果存在)/pyproject.toml文件中的全部依赖
poetry install 

2、只安装非development环境的依赖,一般部署时使用 <br />
poetry install --no-dev  

3、只安装依赖项
poetry install  --no-root 

  • 1、不存在poetry.lock文件时
    • Poetry只是解析pyproject.toml文件中列出的所有依赖项,并下载其文件的最新版本。当Poetry完成安装后,它会将下载的所有软件包及其确切版本写入poetry.lock文件, 将项目锁定到这些特定版本。 应该将poetry.lock文件提交到的项目仓库,这样所有在项目上工作的人都被锁定到相同版本的依赖项。
  • 2、存在poetry.lock文件时(推荐)
    • 如果已经存在poetry.lock文件和pyproject.toml文件 当运行poetry install时,这意味着之前运行过install命令, 或者项目中的其他人运行了install命令并将poetry.lock文件提交到项目中(这很好)
    • 无论哪种方式,当存在install文件时运行poetry.lock都会解析并安装在pyproject.toml中列出的所有依赖项, 但是Poetry使用了poetry.lock中列出的确切版本,以确保每个项目工作人员的软件包版本都是一致的。 因此,将拥有pyproject.toml文件所请求的所有依赖项, 但它们可能并不都是最新版本 (somepoetry.lock文件中列出的依赖项可能在创建该文件后发布了较新的版本)。 这是通过设计实现的,它确保项目不会因为依赖项中的意外更改而中断。

5.4.3、给项目添加国内源

  • 说明:如果使用默认的国外的源,在安装依赖包时可能会出现连接超时或安装超时的情况,这里推荐使用国内的源。
  • 1、设置默认镜像源

poetry source add --default mirrors https://pypi.tuna.tsinghua.edu.cn/simple/

  • 2、设置次级镜像源

 poetry source add --secondary mirrors https://pypi.tuna.tsinghua.edu.cn/simple/

5.5、管理依赖冲突

1、查看项目安装的依赖

poetry show

2、树形结构查看项目安装的依赖

poetry show -t

  • 解释colorama >= 0.4.1,
    • 安装某个包时,会在pyproject.toml文件中默认使用版本限定,比如colorama = “^0.4.1” ,当执行 poetry update 时,colorama也许会更新到0.4.9,但绝不会更新到0.5.0,意思是在更新依赖时不会修改最左边非零的数字号版本,这样的默认设定可以确保不会更新到不兼容变动的版本。

3、更新所有锁定版本的依赖

poetry update

4、更新指定的依赖

poetry update package

5.6、poetry config配置

5.6.1、基本认识

  • poetry提供了全局config配置和特定项目的config局部配置。
    • 目前poetry支持的参数有:

5.6.2、poetry config 的使用

1、本地参数配置

  • 使用参数--local

poetry config virtualenvs.create false --local

  • 执行后,当前项目在执行poetry install/poetry add时如果没有虚拟环境的话就会直接安装到系统路径上。
  • 执行后,会在当前项目生成poetry.toml文件:
  • 全局配置文件config.toml不受影响

2、全局配置

  • 直接使用不添加参数

poetry config virtualenvs.create false

4、重置配置

  • 使用参数--unset

poetry config virtualenvs.create --unset 执行后全局配置中的virtualenvs.create的值被重置

poetry config virtualenvs.create --local --unset 执行后当前项目配置中的virtualenvs.create的值被重置

5、列出当前配置

  • 注意:列出配置时,包括了全局和本地的配置,本地的配置会覆盖全局的参数:
    • 示例:virtualenvs.create全局为true,本地为false,那这里 virtualenvs.create=false

poetry config --list

6、修改虚拟环境路径

  • 根据管理虚拟环境的习惯,修改虚拟环境存放的目录

poetry config cache-dir E:\Temp

5.7、Pycharm中使用poetry

1、如果是已有项目,或GitHub拷贝项目,pyproject.toml文件已存在

  • 首先执行poetry install创建虚拟环境并安装全部依赖库,然后再将这个虚拟环境添加到pycharm中

a.添加虚拟环境

b.添加存在的虚拟环境

2、新建的项目,还没有pyproject.toml文件和虚拟环境

  • 首先执行 poetry init 创建pypoetry.toml文件
  • 然后执行 poetry add 或poetry install 创建虚拟环境
  • 最后按照上面的操作给项目添加虚拟环境
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值