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的条件或下面布尔运算的操作 ...
随机推荐
- 通过Mellanox ConnectX NIC使用XDP加速
通过Mellanox ConnectX NIC使用XDP加速 Accelerating with XDP over Mellanox ConnectX NICs XDP(eXpress Data Pa ...
- 【渗透实战】sqlmap_修改tamper脚本_绕过WAF_第三期
/文章作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334/ 今天google找注入点的时候发现某企业一个挺有意思的waf 常规操作绕过去后决定写一篇博客 信息收集 ...
- 一张图理清计算机常见编码的关系。ASCII、Unicode都不是事儿
编码按适用范围可以简单分为:(本人自定义) 美国编码(ASCII)ASCII为基础编码,来源于美国:其它编码都兼容ASCII编码: 欧盟编码(ISO8859-1.WINDOWS-1252)先是ISO- ...
- 20204107 孙嘉临《PYTHON程序设计》计算器设计实验二报告
课程:<python程序设计> 班级:2041 姓名:孙嘉临 学号:20204107 实验教师:王志强 实验日期:2021年4月12日 必修/选修:公选课 ##一.实验内容 设计并完成一个 ...
- R语言读取文件
1.R语言读取文件,文件类型为.txt 直接使用read.table()即可,若不知道当前的工作目录,可以使用函数getwd()来查看 2.R语言读取文件,文件类型为.xlsx 方法一:可以把excl ...
- 乘风破浪,Windows11官方原装4K壁纸,前卫的艺术数字设计
Windows11预览版官方壁纸 默认主题Windows Windows.zip 月轮主题ThemeA ThemeA.zip 艺术石主题ThemeB ThemeB.zip 日升主题ThemeC The ...
- 4、saltstack的使用
官方文档地址:http://repo.saltstack.com/#rhel 4.1.saltstatck介绍: 用户要一致,这里使用的是root用户: 用于批量管理成百上千的服务器: 并行的分发,使 ...
- 信奥赛一本通1573:分离与合体C++分离与合体
题目链接 #include<cstdio> #include<algorithm> using namespace std; int dp[305][305]={},jojo[ ...
- jdk keytool 自签证书
jdk keytool 自签证书 https需要用到ssl证书,可以从阿里等平台申请,本文采用jdk keytool进行自签证书. 生成环境:linux 用jdk自带keytool工具生成密钥库 ke ...
- 精尽Spring Boot源码分析 - @ConfigurationProperties 注解的实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...