惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
V
V2EX
B
Blog RSS Feed
有赞技术团队
有赞技术团队
博客园 - Franky
美团技术团队
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
云风的 BLOG
云风的 BLOG
L
LangChain Blog
GbyAI
GbyAI
The Cloudflare Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
The Register - Security
The Register - Security
大猫的无限游戏
大猫的无限游戏
D
Docker
Vercel News
Vercel News
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
博客园_首页
A
About on SuperTechFans
J
Java Code Geeks
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Recent Announcements
Recent Announcements
G
Google Developers Blog
小众软件
小众软件
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
F
Full Disclosure
Jina AI
Jina AI
H
Help Net Security

梓言堂 - Yuk's Blog

使用Obsidian优雅地写Hugo博客文章 魔改PaperMod主题和博客改动 Android 提取boot.img 并安装Magisk Android抓包和中间人攻击实现HTTP数据拦截篡改 从Wordpress迁移到Hexo,我都做了些什么 脚本助手:云手机上跑脚本的好伙伴 Caddy搭建Typecho并用脚本监控重启 Sony Xperia XZ1(G8342)强刷笔记 Android软件数据备份以及管理优化 记一次使用Crontab的错误排查 以更低的价格购买和续费域名 使用AirtestIDE和iOS-Tagent实现iOS端自动化测试
Python虚拟环境大杂烩
Yuk · 2020-11-30 · via 梓言堂 - Yuk's Blog

写在前面

距离上篇博客差了半年,很惭愧,因为促使自己写博客的动力之一就是接触了新东西,想记录下来,这大半年实在不太在状态,写了几篇文章发布后又删除了,好在最近感觉好了不少。

这个学期开始明显感觉校内网限速严重了许多,时不时还断连需要重新认证一下,体验很不好,尤其是用Pipenv安装一些包的时候,尽管知道安装慢很大一部分是网络的问题,但当我看到Pipenv安装报错时,也渐渐对Pipenv起了一些疑虑,有时当我创建一个新的虚拟环境需要很长时间,有时候又Locking很久......,那颗折腾的心又躁动了起来。

为什么需要虚拟环境

防止各种项目冲突顺便方便的导出所有依赖,简单的例子就是A项目中需要的是Django1.0,而B项目中需要的是Django2.0,为了防止来回卸载安装,所以我们使用虚拟环境分别配置单独的运行环境

虚拟环境大杂烩

光是Pycharm所支持的就有 virtualenv Conda Pipenv等等 以及看大佬推荐的Poetry Conda 最后还是选择了顺手的 Hatch

选择哪种虚拟环境工具好

先给出目前的个人结论:用回 virtualenv/venvpip不一定是最方便的,但是至少更可靠 之前我一直都是用的Pipenv,说实在的除了偶尔Creating&Locking慢了点,并没有遇到什么大问题,但当我看到 不要用 Pipenv 改变了 ‘我用着舒服你那问题我没遇见就接着用下去’ 的想法。

其中最让我不能接受的就是打着官方暧昧关系进行宣传以及快一年没有新的 releases

既然已经有了换的心思,满怀希望的去尝试大佬推荐的 Poetry ,嗯官网界面很对我口味,结果正当我安装好初始化时现实又给我来了一巴掌。

→ poetry init

This command will guide you through creating your pyproject.toml config.

[UnicodeDecodeError]
'ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128
)

溜了溜了,连最基础的路径下创建文件都能整一个编码错误的项目我是更不敢用了,还是老办法吧。

重回 virtualenv 和 pip 时代

这里我还用到了virtualenvwrapper这个工具来简化virtualenv的操作

pip install virtualenv virtualenvwrapper
# 环境配置
# 查看 virtualenvwrapper.sh 路径
$ which virtualenvwrapper.sh
/usr/local/bin/virtualenvwrapper.sh

# 配置环境变量 (以后创建的环境目录都集中放在 $WORKON_HOME 目录下管理了)
# 配置文件位置: ~/.bashrc (bash) 或 ~/.zshrc (zsh) (Linux/macOS(win自行搜索))
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 简化命令 ~/.zshrc (zsh)
# which python  python3 得到-p后的参数值
alias mkv3='mkvirtualenv -p /usr/local/bin/python3'
alias mkv2='mkvirtualenv -p /usr/local/bin/python'
alias lsv='lsvirtualenv'
alias rmv='rmvirtualenv'
alias shv='showvirtualenv'
alias dev='deactivate'

常用命令

# workon  进入切换 环境
$ workon ENVNAME

# mkvirtualenv 创建环境
$ mkvirtualenv ENVNAME

# lsvirtualenv 展示环境列表
$ lsvirtualenv [-b] [-l] [-h]

# rmvirtualenv 删除环境
$ rmvirtualenv ENVNAME

# cpvirtualenv 复制环境
$ cpvirtualenv ENVNAME [TARGETENVNAME]

# allvirtualenv 所有环境运行命令 (比如安装包)
$ allvirtualenv command with arguments
$ allvirtualenv pip install -U pip

# deactivate 退出当前环境
$ deactivate

# mkproject  创建项目
$ mkproject [-f--force] [-t template] [virtualenv_options] ENVNAME

六、发展中的Hatch(不支持Python2)

就在我准备收尾时,突然发现了 Hatch 这个项目,基于virtualenv 简单安装使用下来发现意外的很舒服,具体安装步骤见项目主页,这里简单回顾提及下

# 安装virtualenv和Hatch
pip3 install virtualenv hatch

# 如果重启后hatch用不了那么可能是你没有配置好python的PATH

# 配置环境变量(Linux/macOS(win自行搜索))
# 配置文件位置: ~/.bashrc (bash) 或 ~/.zshrc (zsh)
> which python3
    /usr/local/Cellar/python/3.7.4/bin
> export PATH=/usr/local/Cellar/python/3.7.4/bin:$PATH

常用命令

# 列出所有的虚拟环境(~/.virtualenvs)
hatch env -l
# 创建虚拟环境
hatch env envname
# 进入虚拟环境
hatch bash envname
# 删除虚拟环境
hatch shed -e envname
# 退出虚拟环境
exit
# 列出所有以保存的pypath
hatch pypath -l
# 添加一个指向/usr/bin/python名字为py2的pypath
hatch pypath py2 /usr/bin/python
# 删除一个pypath
hatch shed -p py2
# 使用指定的pypath(这里是py2)作为虚拟环境的解释器
hatch env -py py2 old

# 简化命令 ~/.zshrc (zsh)
alias inv='hatch bash'
alias lsv='hatch env -l'
alias rmv='hatch shed -e'

目前上面这些功能其实和virtualenv差不多,但是项目主页上的TODO中有一行写到python - installs the desired version of Python. will work on each platform,这代表以后版本更新后也可以自由的像Conda那样创建虚拟环境的时候直接指定特定的Python版本。

(值得一提的是:之前我也尝试去用了下Conda来管理,但是他会和pip有一定冲突,而且如果用Conda install会有很多包找不到,在虚拟环境下安装pip又会多出几个额外的依赖,所以放弃了)

期待Hatch后续的更新,毕竟我切换Python版本还是用的少的。