文章

python 环境管理

最近在看关于 Frida 相关的 hook 脚本,在开发过程中,需要使用到 Python,但是 Python 的版本和依赖包版本不一致,导致项目无法运行。 顺便研究了一下 python 的环境管理工具。用起来发现很方便,但是感觉命令有点多,记录一下。

  • python中,pyenv 与 pipenv,pip 与 pip3 的详解。

  • pyenv 是最常用的 Python 版本管理工具,它支持安装、卸载和切换不同的 Python 版本。

1
2
# 安装 pyenv
brew install pyenv
  • 关于 pyenv 的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看版本
pyenv versions #查看版本
  3.10.6
pyenv install --list #查看可用版本
pyenv install 3.11.11 #安装版本
pyenv global 3.11.11 #设置为全局版本,如果设置项目级的则为 local
pyenv local 3.9.7  # 在当前文件夹创建 `.python-version` 文件,指定该文件夹使用的 Python 版本
pyenv shell 3.9.7 #临时切换 Python 版本

# 创建和管理虚拟环境
pyenv install 3.9.7  # 确保安装你需要的 Python 版本
pyenv virtualenv 3.9.7 myenv  # 创建名为 myenv 的虚拟环境
pyenv activate myenv #激活
pyenv deactivate    #停用

pyenv uninstall 3.9.7  # 卸载 Python 3.9.7
  • 查看安装包的路径和存储路径
1
2
3
4
5
6
7
8
$ python3 -m site
sys.path = [
    '/opt/homebrew/Cellar/python@3.13/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python313.zip',
    '/opt/homebrew/Cellar/python@3.13/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13',
    '/opt/homebrew/Cellar/python@3.13/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/lib-dynload',
    '/opt/homebrew/lib/python3.13/site-packages',
    '/opt/homebrew/opt/python@3.13/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages',
]
  • pip与 pip3区别与关系
1
2
3
4
5
6
7
8
9
10
11
12
pip 与 pip3 的关系:
# 在多 Python 版本系统中:
# pip: 用于管理 Python 2 的包。
# pip3: 用于管理 Python 3 的包。
# 如果系统已停止支持 Python 2:
# pip 和 pip3 都默认用于 Python 3,且多数情况下是完全等价的。
# 下面测试指向的是同一个位置
$~ pip --version
$ pip 24.0 from /Users/gr/.pyenv/versions/3.11.11/lib/python3.11/site-packages/pip (python 3.11)
$ pip3 --version
$ pip 24.0 from /Users/gr/.pyenv/versions/3.11.11/lib/python3.11/site-packages/pip (python 3.11)
# 为保证依赖冲突与隔离问题,建议使用 pipenv 工具
  • pipenv pipenv 是一个集虚拟环境管理项目依赖管理一体的工具,可以有效地简化 Python 项目开发环境的维护过程。它特别适用于需要隔离项目环境(虚拟环境)和依赖精确控制(通过 PipfilePipfile.lock)的开发场景。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 安装 pipenv
pip install pipenv
# 创建虚拟环境
pipenv install

# 这会在当前目录下创建一个虚拟环境,同时生成两个文件:
# Pipfile:用于管理项目的依赖包。
# Pipfile.lock:是自动生成的锁定文件,固定依赖的版本。

# 安装包
pipenv install flask
# 安装开发依赖(开发阶段临时依赖包):
pipenv install pytest --dev
# 指定依赖版本:
pipenv install requests==2.28.1
# 卸载包
pipenv uninstall flask
# 运行
pipenv run python3 xxx.py
# 进入虚拟环境
pipenv shell
# 退出虚拟环境
exit
# 查看虚拟环境
pipenv --venv
# 查看依赖
pipenv graph
# 清除依赖
pipenv lock --clear
# 删除虚拟环境
pipenv --rm
# 退出虚拟环境
exit
# 生成 requirements.txt
pipenv lock -r > requirements.txt
# 安装 requirements.txt
pipenv install -r requirements.txt
# 生成 Pipfile.lock
pipenv lock
# 生成 Pipfile
pipenv lock --requirements > Pipfile
# 生成 Pipfile.lock
pipenv lock --requirements > Pipfile.lock

  • 开发环境与生产环境
1
2
3
4
5
6
7
8
9
10
11
12
# 开发阶段和生产阶段
# 开发阶段主要用于开发时用到的依赖库,可不和生产环境关联
# 开发阶段:
pipenv install --dev              # 安装所有依赖(生产和开发)
pipenv install <package> --dev    # 安装新的开发依赖
pipenv graph                      # 查看依赖树
pipenv uninstall --all-dev        # 清除所有开发依赖
#生产阶段:
pipenv install --deploy --ignore-pipfile  # 安装生产依赖(严格按照锁定版本)
pipenv lock                               # 锁定依赖版本
pipenv run python app.py                  # 运行生产环境的应用

  • 虚拟环境(未测试过)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 为什么使用虚拟环境?
# 使用 Virtual Environment(虚拟环境)
# 为什么使用虚拟环境?
# 虚拟环境允许每个项目使用自己独立的一套 Python 和库,而不会影响全局环境。这是 Python 开发的最佳实践。
# 创建虚拟环境
# 创建一个虚拟环境:
python3 -m venv myenv
# 激活虚拟环境:
source ./myenv/bin/activate
# 在虚拟环境中,安装库会仅作用于该环境:
pip install numpy
# 查看虚拟环境中安装的库:
pip list
# 退出虚拟环境:
deactivate
本文由作者按照 CC BY 4.0 进行授权