1
0

Python: pipenv 虚拟环境

This commit is contained in:
周中平 2023-12-14 22:21:12 +08:00
parent 53e2d9d730
commit 004b563b44
Signed by: zhouzhongping
GPG Key ID: 6666822800008000

View File

@ -14,122 +14,221 @@ date: 2023-01-18
## 简介 ## 简介
pipenv 是一个 Python 包和环境管理工具,用于管理项目的依赖关系和创建虚拟环境。它的目的是简化 Python 包管理和环境管理的过程,使其变得更容易和更可靠 Pipenv 是 Python 官方推荐的包管理和虚拟环境工具。它结合了 pip 和 virtualenv 的功能,提供了一种简单且高效的方式来管理项目的依赖和环境
pipenv 是一个 Python 包和环境管理工具,用于管理项目的依赖关系和创建虚拟环境。它的目的是简化 Python 包管理和环境管理的过程,使其变得更容易和更可靠 Pipenv 主要旨在为应用程序的用户和开发人员提供一种简单的方法来**实现一致的工作项目环境**
pipenv 主要由两部分组成: ### 特性
- 一个命令行工具,用于管理依赖关系和创建虚拟环境。 1. **自动管理虚拟环境**Pipenv 自动创建和管理虚拟环境,简化了环境配置过程。
- 一个配置文件Pipfile用于描述项目的元数据和依赖关系。 2. **声明式依赖文件**Pipfile 易于阅读和编辑,更加人性化。
3. **依赖锁定**Pipfile.lock 确保了在不同环境中依赖版本的一致性。
4. **安全性检查**:集成了安全性检查功能,可以检测依赖中的安全漏洞。
5. **环境变量隔离**:通过支持 `.env` 文件Pipenv 提供了一种简单的环境变量管理方法。
安装 pipenv 需要通过 pip install pipenv 命令来安装。如果想要创建一个新的项目,可以使用 pipenv install 命令来创建虚拟环境和安装依赖。 ## 安装
在 pipenv 中,所有的依赖关系都被维护在一个名为 Pipfile 的文件中这个文件用于描述项目的依赖关系。pipenv 会自动生成锁定文件Pipfile.lock来跟踪项目依赖关系的版本号这样可以保证项目在不同环境中使用相同的依赖关系版本 Pipenv 可以通过 pip 安装在不同的操作系统上,推荐使用最新版的 pip 和 Python 以确保兼容性。安装命令如下:
另外 pipenv 支持从 requirements.txt 导入依赖项,并且也可以通过 pipenv lock 命令将项目依赖项导出到 requirements.txt 文件。总之 pipenv 是一个简单易用,支持创建虚拟环境和管理依赖关系的工具,适合于开发和维护 Python 项目的开发人员使用。
## 使用
安装前确保已经拥有了 Python3 和 Pip3并且可以从 shell 中使用它。
### 1. 安装
```shell ```shell
pip install pipenv # 在 macOS 上
pip3 install pipenv $ brew install pipenv
# 升级 # 在 Windows 上
pip install --upgrade pipenv $ pip install --user pipenv
# 卸载 # 在 Linux 上
pip uninstall pipenv $ pip3 install --user pipenv
``` ```
### 2. 使用 注意:在 Windows 系统上,可能需要将用户二进制目录添加到环境变量。在 Linux 系统上,建议使用 `pip3` 以确保 Python 3 的兼容性。
#### 2.1 虚拟环境 ## 基本概念
```shell ### Pipfile
# 创建虚拟环境
pipenv install
# 指定 Python 版本 - `Pipfile`:声明项目所需依赖的文件,类似于 `requirements.txt`,但更易于阅读和维护。
pipenv --python 3
pipenv --python 2.7.14
# 激活虚拟环境 shell ### Pipfile.lock
pipenv shell
# 关闭虚拟环境 shell - `Pipfile.lock`:锁定依赖版本,确保所有环境中的依赖一致性,防止版本冲突。
exit
### 常用流程
```mermaid
graph LR
A[开始] --> B[克隆/创建项目]
B --> C[安装依赖: pipenv sync]
C --> D[添加包: pipenv install <package>]
D --> E[更新全部依赖: pipenv update]
E --> F[更新特定包: pipenv update <package>]
F --> G[检查过时包: pipenv update --outdated]
G --> H[确定虚拟环境路径: pipenv --venv]
H --> I[激活 Pipenv shell: pipenv shell]
``` ```
#### 2.2 依赖管理 ``````shell
# 1.克隆或创建项目仓库
cd your_project_directory
```shell # 2.安装依赖使用 pipenv sync 安装 Pipfile.lock 中的依赖
# 安装依赖 pipenv sync
# 3.添加包并更新依赖
pipenv install <package> pipenv install <package>
# --dev 选项安装开发依赖 # 4.更新所有包
pipenv install --dev <package>
# 从 requirements.txt 安装依赖
pipenv install -r path/to/requirements.txt
# 导出 requirements.txt
pipenv requirements > requirements.txt
pipenv requirements --dev > requirements.txt
# 指定安装依赖版本,使用语义化版本控制方案
pipenv install requests~=1.2
# 对比上下游依赖
pipenv update --outdated
# 升级所有依赖
pipenv update pipenv update
# 升级指定依赖 # 更新特定包
pipenv update <pkg> pipenv update <package>
# 删除依赖 # 检查过时的包
pipenv uninstall <package> pipenv update --outdated
# 锁定依赖 # 获取虚拟环境的路径
pipenv lock pipenv --venv
# 验证依赖 # 激活 Pipenv shell 虚拟环境
pipenv verify pipenv shell
``` ``````
#### 2.3 依赖包源 ## 基本操作
### 创建虚拟环境
创建一个新的项目时Pipenv 会自动为你创建一个虚拟环境。运行以下命令来创建一个新的项目:
```shell ```shell
pipenv install --pypi-mirror <mirror_url> mkdir myproject
cd myproject
pipenv update --pypi-mirror <mirror_url> pipenv install
pipenv sync --pypi-mirror <mirror_url>
pipenv lock --pypi-mirror <mirror_url>
pipenv uninstall --pypi-mirror <mirror_url>
``` ```
### 3. 命令 这会创建一个 `Pipfile` 和一个空的虚拟环境。
### 安装和同步依赖
- 安装依赖:`pipenv install [package]`
```
# 例如,安装 requests
pipenv install requests
```
这会自动将 `requests` 添加到 `Pipfile` 并更新 `Pipfile.lock`
- 同步环境:`pipenv sync`
使用 `pipenv sync` 可以快速同步项目环境,例如:
```shell
# 根据 Pipfile.lock 安装依赖
pipenv sync
```
## 常用命令
| 命令 | 用途 | | 命令 | 用途 |
| ------------------------------ | ---------------------------------------------------- | | ---------------------------------- | ------------------------------------------------ |
| pipenv install | 安装项目所需的包 | | pipenv install | 安装项目所需的包 |
| pipenv install [package] | 安装特定的包 | | pipenv install [package] | 安装特定的包 |
| pipenv install --dev [package] | 安装用于开发环境的包 | | pipenv install --dev [package] | 安装用于开发环境的包 |
| pipenv uninstall [package] | 卸载特定的包 | | pipenv uninstall [package] | 卸载特定的包 |
| pipenv lock | 生成锁定文件,用于确保项目在不同环境中的包版本一致性 | | pipenv lock | 生成锁定文件,确保项目在不同环境中的包版本一致性 |
| pipenv sync | 根据 Pipfile.lock 安装所有依赖,确保与锁文件一致 |
| pipenv update | 更新项目中的所有包 | | pipenv update | 更新项目中的所有包 |
| pipenv update [package] | 更新特定的包 | | pipenv update [package] | 更新特定的包 |
| pipenv check | 检查项目中的包是否最新 | | pipenv install --ignore-pipfile | 忽略 Pipfile根据 Pipfile.lock 安装依赖 |
| pipenv install --selective-upgrade | 升级指定的依赖并更新 Pipfile.lock 文件 |
| pipenv check | 检查项目中的包是否有安全漏洞 |
| pipenv verify | 校验 Pipfile.lock 中的哈希是否最新 |
| pipenv graph | 展示项目依赖关系图 | | pipenv graph | 展示项目依赖关系图 |
| pipenv clean | 删除虚拟环境中无用的包 |
| pipenv shell | 启动虚拟环境的 shell | | pipenv shell | 启动虚拟环境的 shell |
| pipenv run [command] | 在虚拟环境中运行命令 | | pipenv run [command] | 在虚拟环境中运行命令 |
| pipenv clean | 删除虚拟环境中无用的包 | | pipenv --venv | 显示虚拟环境的位置 |
| pipenv --py | 显示虚拟环境中 Python 解释器的位置 |
| pipenv --where | 显示项目文件的位置 |
| pipenv --rm | 删除虚拟环境 |
## 高级操作
### 自动安装 Python
Pipenv 可以与 pyenv 结合使用,自动安装所需的 Python 版本。这在你的系统中没有安装特定版本的 Python 时非常有用。
示例代码:
```shell
# 假设你的 Pipfile 需要 Python 3.6,但系统中没有安装
# 当运行 pipenv install 时,它会提示是否使用 pyenv 安装 Python 3.6
pipenv install
```
### 自动加载 `.env` 文件
Pipenv 会自动从 `.env` 文件加载环境变量。这对于管理配置和密钥非常有用,尤其是在生产环境中。
```shell
# 假设你有一个 .env 文件包含如下内容
HELLO=WORLD
# 当运行 pipenv shell 或 pipenv run 时,它会加载这些环境变量
pipenv run python main.py
```
### 自定义虚拟环境位置
通过设置 `WORKON_HOME` 环境变量,你可以自定义 Pipenv 创建虚拟环境的位置。
```shell
# 将虚拟环境存储在特定位置
export WORKON_HOME=~/.venvs
```
### 使用 Pipenv 进行测试
Pipenv 与 Travis CI 和 tox 等测试框架结合使用,可以维护一致的测试环境。
示例 Travis CI 配置:
```yaml
language: python
python:
- "3.6"
install:
- pip install pipenv
- pipenv install --dev
script:
- pipenv run pytest
```
## Pipfile Vs setup.py
理解 Pipfile 和 setup.py 之间的区别。Pipfile 用于应用程序,而 setup.py 用于库。
示例 Pipfile
```markdown
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[packages]
requests = "*"
```
示例 setup.py
```
from setuptools import setup
setup(
name='your_package',
version='0.1',
install_requires=[
'requests',
]
)
```