前言

之前虽略有提及Python,但是没有实际地写点料。惭愧,惭愧,所以这次先起个头,讲讲如何构建虚拟Python开发环境。相信之前看过我博客的人可能会想:博主不会又要聊聊Docker吧?放心,不会。首先Docker虽然适合构建虚拟Python容器,但是却存在一个问题——交互性。Python开发者必然是希望生成的软件具备可移植性。但是用Docker做移植是需要Docker build的。这样会使得开发过程变得极为不方便。所以我们需要聊聊除Docker以外,Python如何实现虚拟开发环境。

为什么需要虚拟开发环境?

Java的圈子流行一句“Java随你怎么升,我还用铁打的Java8”,但是我们应该知道开发语言都存在多个版本,而且有些语言会在强大的社区拥护下成长,产生出一些多版本的LTS版本或是stable版本,用于项目的发展。于是,我们在接触新老项目的时候,就会需要调整Python的开发环境。所以原因如下:

  1. 多项目之间便于切换开发环境。
  2. 虚拟环境可以产生简洁的配置文件,便于项目实施部署。
  3. 与Git结合,便于项目的管理和开发环境的快速构建及重构。

工具

  1. conda(linux采用miniconda,windows采用anaconda)
  2. Poetry

为什么需要Conda?

正如Rust可以通过Cargo来实现版本的切换,Python也有很多相关的工具如pyenvpyenv-virtualenvconda等。这里我推荐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安装

三种方式:

  1. 自己搜索anaconda官网,下载exe文件,麻瓜式安装。
  2. choco安装
  3. 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开发环境。

感谢

  1. A Guide to Python Environment, Dependency and Package Management: Conda + Poetry
  2. Building a Python package, and a container image with poetry

Python开发篇——构建虚拟Python开发环境(Conda+Poetry)的更多相关文章

  1. 构建虚拟工控环境系列 - 西门子虚拟PLC

    一. 概述 跟随着工控安全一路走来,工控安全市场今年明显有相当大的改善,无论从政策还是客户需求,都在逐步扩大中.但是,搞工控安全研究的人员却寥寥无几.一方面工控安全是个跨学课的技术,需要了解多方面的知 ...

  2. python基础篇_001_初识Python

    一.Python环境 windows环境安装Python步骤 .下载安装包:https://www.python.org/downloads/windows/  .安装:默认安装路径:C:\pytho ...

  3. [python学习篇][书籍学习][python standrad library][内建函数]之[list,open,len,pow,range,

    Python 解释器内置了一些函数,它们总是可用的.这里将它们按字母表顺序列出.     Built-in Functions     abs() divmod() input() open() st ...

  4. 构建虚拟工控环境系列 - 罗克韦尔虚拟PLC

    一. 概述 本篇主要介绍罗克韦尔虚拟PLC的搭建,使用的操作系统为Windows7 x86 Ultimate(DEEP_GHOST_WIN7_SP1_X86_V2015_06.iso),虚拟化软件为 ...

  5. Python进阶篇四:Python文件和流

    摘要: Python对于文件和流的操作与其他编程语言基本差不多,甚至语句上比其他语言更为简洁.文件和流函数针对的对象除了这两者之外还有,类文件(file-like),即python中只支持读却不支持写 ...

  6. [python学习篇][书籍学习][python standrad library][内建函数]之[all,any,basestring,isinstance,bin,bool,@classmethod,@staticmethod,cmp,enumerate

    Python 解释器内置了一些函数,它们总是可用的.这里将它们按字母表顺序列出.     Built-in Functions     abs() divmod() input() open() st ...

  7. [python学习篇][书籍学习][python standrad library][内建类型]迭代器类型

    我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list.tuple.dict.set.str等:一类是generator,包括生成器和带yield的generato ...

  8. [python学习篇][书籍学习][python standrad library][内建类型]之数值

    数值类型 — int, float, long, complex 有四种不同的数值类型:普通整数.长整数.浮点数和复数 普通整数(或者简称整数)使用C中的long实现,其精度至少为32位(sys.ma ...

  9. [python学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作

    几乎所有对象都可以比较.测试真值.转换为字符串(其实就是用repr()函数,或略有差异的str()函数来转换) 1 对象是否为真 任何对象都可以测试真值,用于if或while的条件或下面布尔运算的操作 ...

随机推荐

  1. springMVC源码解读笔记

    1: DispatcherServlet 的初始化流程(调用的init方法) a) 初始化spring高级容器,WebApplicationContext(容器初始化12个步骤) Servlet类的i ...

  2. 查找文件与cron计划任务

    查找文件 • 根据预设的条件递归查找对应的文件 find [目录] [条件1] [-a|-o] [条件2] ... -type  类型(f文件.d目录.l快捷方式) -name  "文档名称 ...

  3. android小技巧之点击两次退出活动

    通常在主活动中可以设置连击退出程序,下面通过代码来实现这一功能: @Override//按两次back键退出public boolean onKeyDown(int keyCode, KeyEvent ...

  4. UF_TRNS 变换相关

    Open C uf5940uf5941uf5942  矩阵乘积变换uf5943  平移变换uf5944  缩放变换uf5945  旋转变换uf5946  镜像变换uf5947  实现变换,根据变换矩阵 ...

  5. 【VBA】字符串处理

    InStr 函数:查找字符串 1 Sub InStr函数() 2 Dim strTemp As String 3 strTemp = "=AAA=BBB=C" 4 Debug.Pr ...

  6. Pytorch Dataset和Dataloader 学习笔记(二)

    Pytorch Dataset & Dataloader Pytorch框架下的工具包中,提供了数据处理的两个重要接口,Dataset 和 Dataloader,能够方便的使用和加载自己的数据 ...

  7. Java on Visual Studio Code的更新 – 2021年5月

    杨尧今 from Microsoft VS Code Java Team 欢迎来到 5月的 VS Code for Java 更新.这次,我们将与您分享Java格式化设置编辑器和其他很酷的功能.开始吧 ...

  8. RobotFramework + Python 自动化入门 二 (关键字)

    在<RobotFramwork + Python 自动化入门 一>中,完成了Robot环境搭建及测试脚本的创建和执行. 本节,对RobotFramework的关键字使用和查看源码进行介绍. ...

  9. 精通Proteus仿真器件制作(3)DLL仿真模型创建

    有些人可能会想:什么叫做"DLL仿真模型之原理图符号"?我想学高级的C++创建DLL(动态链接库)仿真模型的方式,你别拦着我,不然,我可就人挡Kill人,佛挡Kill佛啦!原理图符 ...

  10. 远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法

    远程连接MySQL错误"plugin caching_sha2_password could not be loaded"的解决办法 问题描述: 今天在阿里云租了一个服务器,当我用 ...