pyenv库应用入门与Ubuntu端安装实践
- pyenv概述
- virtualenv、pyvenv、pyenv
- virtualenv
- pyvenv
- pyenv
- Ubuntu端安装pyenv实践
- 安装依赖
- 报错解决
- 安装pyenv
- 配置环境变量
- 更换pyenv源地址
- pyenv基本用法
- 安装成功
- 服务器部署scrapyd
pyenv概述
pyenv 是一个用于管理多个 Python 版本的工具,它允许用户在同一台机器上安装、切换和管理不同版本的 Python。
virtualenv、pyvenv、pyenv
virtualenv
virtualenv 所要解决的是同一个库不同版本共存的兼容问题。例如项目 A 需要用到 requests 的 1.0 版本,项目 B 需要用到 requests 的 2.0 版本。如果不使用工具的话,一台机器只能安装其中一个版本,无法满足两个项目的需求。
virtualenv 的解决方案是为每个项目创建一个独立的虚拟环境,在每个虚拟环境中安装的库,对其他虚拟环境完全无影响。所以就可以在一台机器的不同虚拟环境中分别安装同一个库的不同版本。
pyvenv
pyvenv 与 virtualenv 功能和用法类似。不同点在于:
- pyvenv 只支持 Python 3.3 及更高版本,而 virtualenv 同时支持 Python 2.x 和 Python 3.x;
- pyvenv 是 Python 3.x 自带的工具,不需要安装,而 virtualenv 是第三方工具,需要安装。
- pyvenv 实际上是 Python 3.x 的一个模块 venv,等价于 python -m venv。
pyenv
与上述两个工具不同,pyenv 不是用来管理同一个库的多个版本,而是用来管理一台机器上的多个 Python 版本。主要解决开发中有的项目需要用Python 2.x,有的项目需要用Python 3.x的场景。
Ubuntu端安装pyenv实践
安装依赖
在安装pyenv之前,你需要确保你的系统上安装了以下依赖:
- Git:用于克隆pyenv的仓库
- Readline:用于命令行补全
- zlib:用于压缩
- libssl-dev(在某些系统上可能需要):用于SSL支持
- libffi-dev(在某些系统上可能需要):用于外部函数接口
- make:用于编译Python和一些其他软件
- ** build-essential**(在某些系统上可能需要):包括编译器和其他构建工具
对于Ubuntu/Debian系统:
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
报错解决
- No module named ‘_bz2’
sudo apt-get install bzip2 libbz2-dev
- No module named ‘_curses’
sudo apt-get install libncurses5-dev libncursesw5-dev
- No module named ‘_ctypes’
sudo apt-get install libffi-dev
- No module named ‘_sqlite’
sudo apt-get install sqlite3 libsqlite3-dev
- No module named ‘_ssl’
sudo apt-get install openssl
sudo apt-get install libssl-dev
- No module named ‘_lzma’
sudo apt-get install liblzma-dev
安装pyenv
使用Git克隆pyenv仓库:
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
配置环境变量
# 编辑.bashrc系统文件
vim ~/.bashrc
# 增加系统环境变量
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$HOME/.pyenv/bin:$PATH"
# 更新文件
source ~/.bashrc
更换pyenv源地址
使用pyenv安装虚拟环境时下载太慢了,可以更换默认的下载源地址:
find ~/.pyenv -type f -exec sed -i 's|https://www.python.org/ftp|https://mirror.nju.edu.cn|g' {} +
- find ~/.pyenv -type f:在 ~/.pyenv 目录下查找所有类型的文件(不包括目录);
- -exec … {} +:对找到的每一个文件执行后面的命令。这里的 {} 是一个占位符,代表当前处理的文件名。使用 + 可以让 find 将多个文件名传递给单个命令行,这比使用 ; 更高效;
- sed -i ‘s|…|…|g’:sed 是一个流编辑器,用于处理或编辑文本。这里使用 -i 选项直接修改文件,而不是输出到标准输出。s|…|…|g 是替换命令,其中 | 分隔符用来代替通常的 / 分隔符,以便更好地处理包含斜杠的URL。
pyenv基本用法
## 查看帮助文档
pyenv
## 查看某个命令帮助文档
pyenv install --help
## 查看版本
pyenv version
## 检查 Python 是否正常运行
python -c "import sys; print(sys.executable)"
## 查看已安装的 Python 版本
pyenv versions
## 查看当前使用的 Python 版本
pyenv version
## 查看所有可用的 Python 版
pyenv install --list
## 安装指定版本
pyenv install 3.9.1
## 验证
python --version
## 卸载指定版本
pyenv uninstall 3.9.1
## 全局指定 Python 版本(影响所有项目)
pyenv global 3.9.1
## 局部指定 Python 版本(仅影响当前项目目录),指定后在当前项目目录内创建 .python-version 文件,保存版本信息
## 优先级高于 global
pyenv local 3.9.1
## 会话级指定 Python 版本(影响所有项目)
pyenv shell 3.9.1
## 查看 python 的安装目录
pyenv which python
## 重新生成 pyenv 的 shims 目录中的可执行文件
pyenv rehash
安装成功
服务器部署scrapyd
前面我们已经安装了3.8.20版本的python环境,接下来我们在这个环境下跑脚本
- 到home目录下新建spider目录,给spider目录绑定3.8.20版本环境
- 安装scrapy:
pip install scrapy
- 新建一个名为
TestProjectSecond
的scrapy项目,并新建一个脚本,进入该目录,执行scrapy crawl 1
- 安装scrapyd:
pip install scrapyd
,pip install scrapyd-client
- 在
TestProjectSecond
下运行scrapyd
,这里需要修改一下默认的ip,默认是127.0.0.1
,需要改成0.0.0.0
,修改文件路径:~/.pyenv/versions/3.8.20/lib/python3.8/site-packages/scrapyd/default_scrapyd.conf
- 然后服务器增加6800端口,就可以在本地打开了。