大家有没有比较好的经验,管理两个版本的 Python , 2 & 3?

2022-05-12 08:45:35 +08:00
 yazoox

发现很多程序的运行环境,都需要 python 支持,而且,版本还不一样。python2 和 python3 都需要。

楼主一直整得不太好(因为不是经常使用),经常一个程序或者环境跑起来,缺 python 。所以特意来请教一下,大家有没有比较好的 best practice ,管理 python 的版本,2 & 3 ,以及对应的 pip 。

macOS 和 windows 都分别怎么设置,比较好用&通用?

谢谢!

7581 次点击
所在节点    Python
70 条回复
ynyounuo
2022-05-12 10:31:26 +08:00
大家完全没有误会你的意思,而是你一直以来以系统 global 为所有项目和程序的 python2/3 依赖的 practice 是最坏的那种而已

就以你举的 neovim 的例子,官方文档里也是推荐了 pyenv 的
https://neovim.io/doc/user/provider.html#g:python3_host_prog

其次比如说你是为了安装 glances 啊 youterm 之类的 global 可执行的东西而非为什么项目或程序做依赖,可以用 pipx ,当然依旧可以 pyenv + 自定义 path / link 来搞定
Tink
2022-05-12 10:32:55 +08:00
不影响啊,virtualenv 随便加,不管是 2 还是 3 ,你甚至可以同时应用 10 个不同小版本
ThirdFlame
2022-05-12 10:33:24 +08:00
miniconda 好用,环境独立,也可以复用。 也可以直接以某个虚拟环境进行执行。
Tink
2022-05-12 10:42:18 +08:00
举个例子,图里有 2.7 和 3.8 的应用,互不影响,也可以同时使用

https://cdn.jsdelivr.net/gh/goxofy/piCS_assault@master/2022/05/upgit_20220512_1652323276.png
princelai
2022-05-12 10:52:11 +08:00
以前用 virtualenv ,现在换到 miniconda 了,太省事了,以前很多依赖、更新都是自己写脚本
littlewing
2022-05-12 11:02:36 +08:00
conda
Latin
2022-05-12 11:09:19 +08:00
个人看法:pyenv + poetry 是目前最好方案
FengMubai
2022-05-12 11:14:32 +08:00
Windows 下用 scoop, `scoop reset python27`切换版本
kukat
2022-05-12 11:35:11 +08:00
以前用 pyenv 管理 python ,nvm 管理 node ,rbenv 管理 ruby...

现在 asdf 一把唆 https://asdf-vm.com/
ZztGqk
2022-05-12 11:40:36 +08:00
pyenv
mantou99
2022-05-12 12:02:20 +08:00
安装 python 时通过源码编译安装,不要用 apt yum 之类的。
编译前根据不同版本指定 比如--prefix=/usr/local/python3.7.5 ,--prefix=/usr/local/python3.9.1 。
理论这样能装所有版本 python ,常用的搞个软连接 ln -s /usr/local/python3.7.5/bin/python3 /usr/bin/python3.7.5
ln -s /usr/local/python3.7.5/bin/pip3 /usr/bin/pip3.7.5
要删除的话直接删 /usr/local/python3.7.5
lolizeppelin
2022-05-12 12:11:03 +08:00
python2/3 在红帽 7 以后是共存的
rpm 包名字都分 python2-和 python3-

最靠谱的就是用系统包管理...

因为用系统包管理所以不能用 pip 装任何 python 包,都要用 rpm 包来装,没有 rpm 包自己打包 rpm
pythonm 的 rpm 包本身就是会基于 pip 编译,spec 文件里写好对应依赖就行

要么系统全管...要么全自己管不走 rpm
BingWong
2022-05-12 14:46:18 +08:00
可以使用 PDM 管理 python 版本和项目

https://github.com/pdm-project/pdm
SenLief
2022-05-12 14:52:02 +08:00
如果是多个版本共存的话,你重新命名就好了。软连接都可以。
shuimugan
2022-05-12 16:30:26 +08:00
没那么复杂,手工都能搞定,python 支持下载 zip 包的,一个目录放一个版本,python 二进制文件原地复制一个,再加到变量里,调用的时候指定具体版本 python 就可以了。
以 windows 为例,下载不同版本的 zip 包 https://www.python.org/ftp/python/3.10.4/python-3.10.4-embed-amd64.zip ,解压保存
c:/python/python3.10/python.exe 原地复制一个 python3.10.exe
c:/python/python3.9/python.exe 原地复制一个 python3.9.exe
c:/python/python3.8/python.exe 原地复制一个 python3.8.exe
c:/python/python3.7/python.exe 原地复制一个 python3.7.exe

至于 pip.exe 官方在 scripts 文件夹里面已经放好了一个 pip3.x 的了,就不需要做了。

然后把
c:/python/python3.10/
c:/python/python3.9/
c:/python/python3.8/
c:/python/python3.7/
追加到环境变量 path 里,然后就可以这样用
pip3.10 install -r requirements.txt
python3.10 1.py

还可以结合 python3.x -m venv 给不同项目做一个依赖包的隔离

这种方式起码可以 python/php/nodejs/ruby 上
UN2758
2022-05-12 17:38:27 +08:00
miniconda + requirement.txt
lvzb86
2022-05-12 17:38:44 +08:00
pyenv ,对于文件夹路径的 python 版本进行管理
zhangneww
2022-05-12 18:05:01 +08:00
居然没人说 pipenv
zhouu
2022-05-12 18:09:36 +08:00
asdf 一把唆 https://asdf-vm.com
clf
2022-05-12 18:09:38 +08:00
版本 2 重命名为 python2 pip2 (或者是版本 3 的重命名为 python3 pip3 )简单粗暴。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/852314

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX