前言
之前虽略有提及Python,但是没有实际地写点料。惭愧,惭愧,所以这次先起个头,讲讲如何构建虚拟Python开发环境。相信之前看过我博客的人可能会想:博主不会又要聊聊Docker吧?放心,不会。首先Docker虽然适合构建虚拟Python容器,但是却存在一个问题——交互性。Python开发者必然是希望生成的软件具备可移植性。但是用Docker做移植是需要Docker build的。这样会使得开发过程变得极为不方便。所以我们需要聊聊除Docker以外,Python如何实现虚拟开发环境。
为什么需要虚拟开发环境?
Java的圈子流行一句“Java随你怎么升,我还用铁打的Java8”,但是我们应该知道开发语言都存在多个版本,而且有些语言会在强大的社区拥护下成长,产生出一些多版本的LTS版本或是stable版本,用于项目的发展。于是,我们在接触新老项目的时候,就会需要调整Python的开发环境。所以原因如下:
- 多项目之间便于切换开发环境。
- 虚拟环境可以产生简洁的配置文件,便于项目实施部署。
- 与Git结合,便于项目的管理和开发环境的快速构建及重构。
工具
- conda(linux采用miniconda,windows采用anaconda)
- Poetry
为什么需要Conda?
正如Rust
可以通过Cargo
来实现版本的切换,Python也有很多相关的工具如pyenv
、pyenv-virtualenv
和conda
等。这里我推荐conda,首先他提供了科学计算的神器Anaconda包和类似于PYPI的conda库,其次他可以轻松的构建各种版本的Python虚拟开发环境。
Linux安装
执行下面的bash命令:
$ cd ~ && rm -rf ./Anaconda3 # 删除原来的anaconda
# 自行清除环境变量里的anaconda信息
$ wget "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh"
$ bash Miniconda3-latest-Linux-x86_64.sh
# 重启计算机
# reboot
$ conda env list查看激活版本
$ conda create -n env_name python=3.8
$ conda activate env_name # 激活虚拟环境
注意:conda可以通过 export 导出环境配置文件
Windows安装
三种方式:
- 自己搜索anaconda官网,下载exe文件,麻瓜式安装。
- choco安装
- scoop安装
为什么需要Poetry
Poetry是一个 Python 打包和依赖管理系统,最初于 2018 年发布。它可以顺利处理依赖项,特别是如果您在全新环境中使用 Poetry 然后添加您的 Python 包。它还可以确定性地处理项目的其他工具和配置,因为它使用TOML格式作为 Python 配置文件。简而言之,TOML 旨在使用易于阅读的最小配置文件。Poetry 使用配置文件来安装 python 包并设置配置。pyproject.toml。
安装Poetry
这里只以linux带过:
$curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
# 重启计算机
# reboot
构建一个Flask应用
$ poetry --version
output: Poetry version 1.1.7
$ poetry new pyService
output: Created package pyservice in pyService
$ poetry add flask
pyproject.toml
[tool.poetry]
name = "pyService"
version = "0.1.0"
description = ""
authors = ["DsnTgr <email@address>"]
[tool.poetry.dependencies]
python = "^3.9"
Flask = "^2.0.1"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
pyservice目录下__init__.py
# hello_world/__init__.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
if __name__ == "__main__":
app.run()
执行下面的命令:
$ export FLASK_APP="pyservice"
$ poetry run flask run
* Serving Flask app 'pyservice' (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
结论
首先通过Conda来实现Python多版本的管理,接着通过Poetry来实现Python项目的依赖包管理,最终达到构建虚拟Python开发环境。