首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >我的Python环境设置

我的Python环境设置

作者头像
岂不美哉Frost
发布于 2019-11-29 13:28:14
发布于 2019-11-29 13:28:14
1.2K00
代码可运行
举报
文章被收录于专栏:Frost's BlogFrost's Blog
运行总次数:0
代码可运行

网上看到一篇博文,我突然也想写一下自己正在使用的Python环境设置,以及对应的工具链。众众众所周知,Python环境管理是个很大很大的坑,坑里面有无数新人or老司机的尸体。而Python环境管理的工具又五花八门,所以可能每个人的设置都不尽相同。我列出的我使用的工具链,至少最大地满足了自己的需求,但不一定满足所有人的需求。但我自认为在Python环境管理方面颇有心得,所以有一定的参考价值。

我的需求

照例列一下我的需求:

  1. 我平时在三种不同的环境中使用Python,除了公司项目规定使用Python 3.6以外,个人项目都是尽可能用最新版:
    1. Python 3.6.8 + Linux(公司,公司项目)
    2. Python latest + Windows(公司,个人项目)
    3. Python latest + MacOS(在家,个人项目)
  2. 我同时工作在多个项目上,所以隔离环境非常重要
  3. 除非非常必要,否则不用docker
  4. 我用到很多Python 的命令行工具:black, twine, ...
  5. 系统上保留的Python数量尽可能少,但我绝不会干升级系统Python这种事的,所有系统Python是什么就是什么,我不会去碰它

使用的工具

1. Python版本管理: PythonUp(posix), None(Windows)

为何不是pyenv?

pyenv 把所有Python版本都分开安装,就算是patch release。这样做可以最大可能地保证你机器上的所有虚拟环境、命令行程序都是可用的,但我会嫌python的版本太多了,毕竟99.99%的情况下,Python 3.7.4都可以平滑替换为Python 3.7.5而不造成任何损失。

PythonUp就是这样一个工具,它同时支持posix + windows平台。你可以把它看成是pyenv的简化版,但它是支持minor release层面隔离的,如果只是patch release升级是直接替换的。使用方法很简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pythonup install 3.6
$ pythonup install 3.8
$ pythonup use 3.8
$ python3 --version
Python 3.8.0

但要注意它相比pyenv要少一些功能:

  • 自动激活local python版本
  • 管理虚拟环境
  • 全局解释器名称为python3pip3而不是pythonpip

Windows呢?

我在Windows上没有用任何工具管理Python版本,因为Python的Windows安装器本身就支持替换升级(patch update),而且全局的Python命令行程序不会受到任何影响。而且Windows上的Python 3自带一个py的版本启动器,可以方便地选择运行的Python:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> py -2 --version
Python 2.7.15
> py -3 --version
Python 3.8.0

所以我基本也不用切换python版本了(py -3 运行起来比python还短些)

2. 安装命令行程序: pipx

把命令行程序安装在隔离的环境中,不会搞乱依赖。原来有一个工具叫pipsi但它停止维护了,pipx是活跃状态而且更加好用,强烈推荐!使用起来也很简单,只需要在原来pip install安装的基础上加一个x就可以了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pipx install black

3. 虚拟环境、依赖管理:Pipenv@master分支 + virtualenv魔改版

master分支

Pipenv被诟病最多的就是已经近一年没有新版发布了,使用Github上的master分支完美解决这个问题,嘿嘿,几个月使用来看,bug已经相当少了。

virtualenv魔改了什么?

Pipenv是使用virtualenv来创建虚拟环境的,但virtualenv有几个重大缺陷,大到我忍不了所以搞了个fork

  1. virtualenv中的python无法再创建虚拟环境
  2. virtualenv指向的python升级则环境变成broken状态

而Python 3自带的venv能解决这些问题,不明白为什么virtualenv还不支持venv,我只能fork一下使得virtualenv尽可能使用python3自带的venv来创建虚拟环境。 使用virtualenv魔改版替换原版:

Bash

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip install -I https://github.com/frostming/virtualenv-venv/releases/download/16.4.4-fork/virtualenv-16.2.0_fork-py2.py3-none-any.whl

fork版本的更新并不能跟上上游的更新,主要也是因为没碰到什么bug且目前只有我自己在用。

Poetry呢

Poetry确实也相当好用且有越来越多的人从Pipenv切换过去,但对我来说Poetry没解决这两个问题之前我不会切过去(也可能已经改进了,有一段时间没用过):

  1. 更多的虚拟环境的管理:清理,删除,查看
  2. poetry的pyproject.toml还不是标准,配置文件格式还有许多问题(C扩展定义、markers支持等),如果切换到poetry会破坏兼容性导致项目只能用poetry开发。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-18T,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【数据处理】sed原理及使用举例(快速理解核心)
在做数据开发中,经常需要通过shell脚本/命令来针对文本进行预处理,sed是一个很强大的流式处理命令,笔者几乎每天都会用到,在这统一梳理总结了下! 其实 sed 很简单,比vim简单很多了! 1. 基础 核心概念 两个空间: 模式空间(pattern space); 交换空间(hold space 保持空间) 模式空间:容纳当前行的缓冲区,即通过模式匹配到的行被读入该空间中 保持空间:一个辅助缓冲区,可以和模式空间进行交互(通过h,H,g,G),但命令不能直接作用于该空间,在进行数据处理时作为“暂存区域”
onephone
2022/03/30
3.4K5
【数据处理】sed原理及使用举例(快速理解核心)
Sed 命令详解
sed是stream editor的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
Allen Cheng
2018/09/10
1.1K0
Sed 命令详解
运维工作中sed常规操作命令梳理
sed是一个流编辑器(stream editor),一个非交互式的行编辑器。它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕;接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。在日常的运维工程中,会时常用sed命令来处理行操作,下面根据工作中的使用经验对sed的用法做一梳理: sed(stre
洗尽了浮华
2018/01/22
1.1K0
运维工作中sed常规操作命令梳理
sed的基本用法详解
在Linux的世界中,有着一个文本三剑客的称呼,它们分别代表grep(文本过滤),sed(流编辑器),awk(gawk)(报告生成器)。 它们是强大的文本处理工具,了解并掌握它们,可以让你对文本的处理更加从容和轻松。 今天我们主要是围绕sed来进行分析。 一、初识sed sed:Stream Editor 从名字上也可以直观的了解到它是一个流编辑工具。何为流编辑器?就是把文本中的文字按照特定的分隔方式,进行数据流处理。sed就是基于这种方式,它是以换行符以分隔单位,对文本进行逐行的处理。 ---- 二、
小小科
2018/05/02
2.7K0
sed的基本用法详解
SED 命令简明教程
awk于 1977 年出生,今年 36 岁本命年,sed比awk大 2-3 岁,awk就像林妹妹,sed 就是宝玉哥哥了。所以 林妹妹跳了个Topless,他的哥哥sed坐不住了,也一定要出来抖一抖。
ihoey
2018/10/31
9100
一天一个 Linux 命令(19):grep 命令
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/148
joshua317
2021/09/29
4880
一天一个 Linux 命令(20):sed 命令
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/150
joshua317
2021/10/09
3600
sed入门详解教程 原
    sed 是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作。sed 本身是一个非常复杂的工具,有专门的书籍讲解 sed 的具体用法,但是个人觉得没有必要去学习它的每个细节,那样没有特别大的实际意义。网上也有很多关于 sed 的教程,我也是抱着学习的心态来学习 sed 的常见的用法,并进行系统的总结,内容基本覆盖了 sed 的大部分的知识点。文中的内容比较简练,加以实际示例来帮助去理解 sed 的使用。
拓荒者
2019/03/11
1.7K0
sed入门详解教程
                                                                            原
详解流编辑器 sed 和 编程语言 awk
本文介绍了如何使用流编辑器sed和编程语言awk对文本进行编辑和处理。首先介绍了流编辑器sed,它是一种非交互式编辑器,可以用于删除、替换和插入文本。然后介绍了编程语言awk,它是一种功能强大的文本处理工具,可以用于各种文本处理任务,包括从文本中提取信息、过滤和转换文本以及处理文本数据。
s1mba
2017/12/28
1.3K0
详解流编辑器 sed 和 编程语言 awk
linux中sed命令总结
原文:https://wangchujiang.com/linux-command/c/sed.html
入门笔记
2022/06/02
3.8K0
linux基础命令介绍十:文本流编辑 sed
与vim不同,sed是一种非交互式的文本编辑器,同时它又是面向字符流的,每行数据经过sed处理后输出。
用户5030870
2019/04/10
1.2K0
第二十一章 : 文本处理
All Unix-like operating systems rely heavily on text files for several types of datastorage. So it makes sense that there are many tools for manipulating text. In thischapter, we will look at programs that are used to “slice and dice” text. In the nextchapter, we will look at more text processing, focusing on programs that are used toformat text for printing and other kinds of human consumption.
砖业洋__
2023/05/06
6740
sed & awk 第二版学习(五)—— 高级 sed 命令
高级命令改变执行或控制的流程顺序。sed 脚本中正常的控制流为:一行被读入模式空间并用脚本中的每个命令逐个应用于那一行;当到达脚本底部时,输出这一行并且清空模式空间;然后新行被读入模式空间,并且控制被转移回脚本顶端。
用户1148526
2024/09/20
3950
Linux之sed命令详解
语法 sed [-hnV][-e<script>][-f<script文件>][文本文件]
AsiaYe
2019/11/06
3.5K0
Linux之sed命令详解
Linux 流编辑器 sed 详解
Linux 中,常使用流编辑器 sed 进行文本替换工作。与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多,可以快速完成对数据的编辑修改。
用户6543014
2019/10/25
1.6K0
Linux 流编辑器 sed 详解
awk(报告生成器),grep(文本过滤器),sed(流编辑器)使用入门
三剑客 linux下的文本三剑客 grep egrep,grep,fgrep 文本查找的需要 grep:根据模式搜索文本,并将符合模式的文本行显示出来。 pattern:文本符和正则表达式的元字符组合而成的匹配条件 grep [option] "pattern" file grep root /etc/passwd -i:忽略大小写 --color:匹配的字符高亮显示 alias alias grep='grep --color' -v:反向查找 -o:只显示被模式匹配的字符串(不显示行
若与
2018/04/25
1.5K0
awk(报告生成器),grep(文本过滤器),sed(流编辑器)使用入门
Sed命令的基本使用
该文介绍了sed命令的基本使用,包括打印匹配行、替换匹配行、从文件中读取并写入到输出中等常用用法,以及使用修饰符进行更高级的文本处理。同时还介绍了sed命令的常用选项和例子,以及与其他文本处理工具的对比。
GavinZhou
2018/01/02
1.4K0
sed命令扩展–转载
文本处理工具之二 sed命令详解 sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动,但是不会再屏幕上返回结果。 sed命令的语法格式: sed的命令格式: sed [option] ‘sed command’filename sed命令的选项(option): -n :只打印模式匹配的行 -e :直接在命令行模式上进行sed动作编辑,此为
老七Linux
2018/05/09
9500
详细grep、sed、awk
[root@VM_0_7_centos tmp]# cat 1.txt 1 2 3 4 5 6 [root@VM_0_7_centos tmp]# cat 2.txt 4 5 6 7 8 [root@VM_0_7_centos tmp]# grep -f 1.txt 2.txt 4 5 6 [root@VM_0_7_centos tmp]# grep -f -v 1.txt 2.txt grep: -v: No such file or directory [root@VM_0_7_centos
用户1173509
2018/03/28
1.7K0
详细grep、sed、awk
Linux||sed命令使用讲解
sed是stream editor的缩写,译为"流编辑器",一般用来对文本数据进行增删改查即新增、删除、替换、查找。
小汪Waud
2023/02/03
1.6K0
Linux||sed命令使用讲解
相关推荐
【数据处理】sed原理及使用举例(快速理解核心)
更多 >
LV.1
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档