目录
5.1.1、Linux, macOS, Windows (WSL)
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 pippip 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版本】
- 创建虚拟环境时指定使用的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 package2、安装最新包指定为开发依赖,会写到pyproject.toml中的[tool.poetry.dev-dependencies]
poetry add package --dev3、安装指定版本
poetry add package=1.0.0
5.4.2、为项目安装全部依赖
安装命令:
1、安装poetry.lock(如果存在)/pyproject.toml文件中的全部依赖
poetry install2、只安装非development环境的依赖,一般部署时使用 <br />
poetry install --no-dev3、只安装依赖项
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 创建虚拟环境
- 最后按照上面的操作给项目添加虚拟环境