Python开发篇——构建虚拟Python开发环境(Conda+Poetry)
前言
之前虽略有提及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开发环境。
感谢
- A Guide to Python Environment, Dependency and Package Management: Conda + Poetry
- Building a Python package, and a container image with poetry
Python开发篇——构建虚拟Python开发环境(Conda+Poetry)的更多相关文章
- 构建虚拟工控环境系列 - 西门子虚拟PLC
一. 概述 跟随着工控安全一路走来,工控安全市场今年明显有相当大的改善,无论从政策还是客户需求,都在逐步扩大中.但是,搞工控安全研究的人员却寥寥无几.一方面工控安全是个跨学课的技术,需要了解多方面的知 ...
- python基础篇_001_初识Python
一.Python环境 windows环境安装Python步骤 .下载安装包:https://www.python.org/downloads/windows/ .安装:默认安装路径:C:\pytho ...
- [python学习篇][书籍学习][python standrad library][内建函数]之[list,open,len,pow,range,
Python 解释器内置了一些函数,它们总是可用的.这里将它们按字母表顺序列出. Built-in Functions abs() divmod() input() open() st ...
- 构建虚拟工控环境系列 - 罗克韦尔虚拟PLC
一. 概述 本篇主要介绍罗克韦尔虚拟PLC的搭建,使用的操作系统为Windows7 x86 Ultimate(DEEP_GHOST_WIN7_SP1_X86_V2015_06.iso),虚拟化软件为 ...
- Python进阶篇四:Python文件和流
摘要: Python对于文件和流的操作与其他编程语言基本差不多,甚至语句上比其他语言更为简洁.文件和流函数针对的对象除了这两者之外还有,类文件(file-like),即python中只支持读却不支持写 ...
- [python学习篇][书籍学习][python standrad library][内建函数]之[all,any,basestring,isinstance,bin,bool,@classmethod,@staticmethod,cmp,enumerate
Python 解释器内置了一些函数,它们总是可用的.这里将它们按字母表顺序列出. Built-in Functions abs() divmod() input() open() st ...
- [python学习篇][书籍学习][python standrad library][内建类型]迭代器类型
我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list.tuple.dict.set.str等:一类是generator,包括生成器和带yield的generato ...
- [python学习篇][书籍学习][python standrad library][内建类型]之数值
数值类型 — int, float, long, complex 有四种不同的数值类型:普通整数.长整数.浮点数和复数 普通整数(或者简称整数)使用C中的long实现,其精度至少为32位(sys.ma ...
- [python学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作
几乎所有对象都可以比较.测试真值.转换为字符串(其实就是用repr()函数,或略有差异的str()函数来转换) 1 对象是否为真 任何对象都可以测试真值,用于if或while的条件或下面布尔运算的操作 ...
随机推荐
- Anchor Boxes示例实战
Anchor Boxes示例实战 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的真实边界框.不同的模型可能使用不同的区域 ...
- Task06:综合练习
练习一: 各部门工资最高的员工(难度:中等) 创建Employee 表,包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--- ...
- 【Azure 机器人】微软Azure Bot 编辑器系列(6) : 添加LUIS,理解自然语言 (The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- csps考前的一些总结(然而可能并没有用)
记录考前的一些复习和总结,如果没有特殊情况不再写新的题解了 图论: 一.最短路: 1.spfa算法中的vis数组记录的是有没有入队,防止多次入队,通过松弛操作来达到最优解 2.dijkstra算法的v ...
- 使用 vite 构建一个表情选择插件
初始化 Vite 基于原生 ES 模块提供了丰富的内建功能,开箱即用.同时,插件足够简单,它不需要任何运行时依赖,只需要安装 vite (用于开发与构建)和 sass (用于开发环境编译 .scss ...
- Pytest学习笔记4-assert断言
前言 pytest作为单元测试框架,自然少不了断言功能,用过unittest的人都知道,在unittest中有丰富的断言方法,比如assertEqual().assertIn().assertTrue ...
- LM-MLC 一种基于完型填空的多标签分类算法
LM-MLC 一种基于完型填空的多标签分类算法 1 前言 本文主要介绍本人在全球人工智能技术创新大赛[赛道一]设计的一种基于完型填空(模板)的多标签分类算法:LM-MLC,该算法拟合能力很强能感知标签 ...
- 从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程
从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程 概述 本文将以ReentrantLock为例来讲解AbstractQueuedSynchron ...
- Opencv 播放mp4文件和读取摄像头图以及可能会发生的一些异常问题解决方法
学习内容 学习Opencv 读取并播放本地视频和打开摄像头图像以及可能会发生的一些异常问题解决方法 代码演示 电脑环境信息: OpenCV版本:4.5.2 ,vs2017 1.视频文件读取与播放 加载 ...
- 【luogu P3807】【模板】卢卡斯定理/Lucas 定理(含 Lucas 定理证明)
[模板]卢卡斯定理/Lucas 定理 题目链接:luogu P3807 题目大意 求 C(n,n+m)%p 的值. p 保证是质数. 思路 Lucas 定理内容 对于非负整数 \(n\),\(m\), ...