老生常谈,但还是问一下, Python env 选择

2020-11-01 18:41:24 +08:00
 imn1
主要是说 linux(目前是 manjaro kde)
windows 因为系统不依赖 py,基本配开发环境、迁移也不会搞崩系统
linux 系统就有不少依赖 py 的东西,以前搞崩过,不敢擅动,还是配环境好了
还好现在默认 py3 了,以前敲 pip 还是 pip3 都要脑子卡半秒想一下

搜了一下,env 管理工具好几个,选择困难症犯了
符合下列需求,哪一个简单、稳定就行
PS:
1.基本排除 conda 系,试过迁移失败,几乎相当于重装
2.也排除 docker 之类,我和大家不同,没有提交代码给别人用的需求,但自己却要装很多工具包辅助工作

个人需求:
1.和系统 python 分离,即使版本号相同,这个是必须的
含 pip 安装包,和使用 sudo 提权运行时,也不会调用系统 python

2.方便迁移,主要指系统重装,可以在重装这个 env 后,导入或恢复备份就完成配置
最好能有个 ini/conf 之类,备份恢复就不需要重新设置,所有包能 copy 就能用最好
后者我是怀疑的,opencv 之类应该要重新编译吧?

3.小版本升级或切换,也不需要重装全部包,这个是额外需求,不能做到或很复杂可以放弃
例如,py3.7 安装好一系列包,想升级 py3.8 检查兼容情况,在保留 py3.7 的情况下,不需要全部重新安装包
如果确认不兼容、需要修改很多的情况,也能顺利切回 py3.7
一句话就是指定某几个 env 版本可以“共用”大多数的包,不能共用的,或者不在指定清单中的就需要另外装

呃,以前用 sublime text,现在基本只用 vscode,其他 ide 甚少接触
3462 次点击
所在节点    Python
12 条回复
ClericPy
2020-11-01 18:48:09 +08:00
我自己模仿 shiv 做了个把依赖打包成 pyz 的 zip 包的库凑合用着了... 反正就是基于 PEP441 和 zipimport 以及 pip, 把所有相关依赖都放到一个文件夹然后 zip 一下, 调用的时候就是 ./env.pyz script.py

暂时没发现什么大问题, 就是遇到动态的 .pyd/.so 那些库, 得提前解压缩出来
renmu123
2020-11-01 18:52:07 +08:00
我目前使用 pyenv+poetry
1. pyenv 可以管理系统级别 Python 版本,poetry 新建的项目也都是虚拟环境
2. poetry 在 add 包后会自动添加到 myproject.toml 文件中并生成 lock 文件,只要将这两个文件加入源码管理中,在别的机器中只要执行 poetry install 就可以安装了。如果 win 种设涉及到编译的包需要安装 vs studio 之类的工具,我一般就手动直接找个编译好的安装
3. 兼容性检查好像有,因为每个包都有支持的 Python 版本,我倒没有这个需求,一般就一个版本用到死,如果升级出现了问题是比较难 debug 的

ps:poetry 在 win 中不能用,但是在 win 中本身管理多个 Python 环境也是比较容易的
ClericPy
2020-11-01 18:53:37 +08:00
@ClericPy 点错了直接发出来了... 没写完, 重新发一次

接上文...

不过也做了自动解压缩并且比对打包时间戳来决定是否要重新解压, 没什么要操心的

做这小工具其实对我来说主要是 Hadoop Streaming 需要各种离线工具上传, 所以抽了个周末写的, 当 app 用还好, 当虚拟环境用因为是基于 subprocess call 来启动自身解释器去解释别的 py 文件, 不知道运行久了会不会有什么问题

同 Manjaro xfce 路过

v2ex 不支持代码格式化就算了, 还老说我 [请不要在每一个回复中都包括外链,这看起来像是在 spamming] 问题是我哪发链接了
imn1
2020-11-01 19:04:59 +08:00
@ClericPy #3
文本中带 . 或 / 与 . 的,都容易误判为链接,@Livid 反馈吧,也不是短时间能解决的事
superrichman
2020-11-01 19:21:17 +08:00
用 python3 -m pip install xxx —user 安装的模块会在用户目录下,和系统的不在一起

要重装或迁移可以把整个目录复制粘贴(不过最好还是维护好 requirements.txt )

我升级就是直接把 3.7 的目录复制到 3.8,个别模块有问题再单独重装
zachlhb
2020-11-02 08:19:34 +08:00
conda 可以导出包列表,重建环境导入不就行了
no1xsyzy
2020-11-02 11:13:33 +08:00
#2 基础上再用 dephell 转换一下依赖项?具体没用过,不过说是可以 setup[.]py poetry 各类 requirements 互转
目前 virtualenvwrapper + pip-tools 用得爽,解释器一直尽量跟最新版本,用上了 := 已经退不回 <3.8 了
yucongo
2020-11-02 12:34:35 +08:00
@renmu123 win 里用 poetry 没问题啊…… 还可以用不同的 Python 版本,修改 C:\Users\xyz\.poetry\bin\poetry.bat 里的 python(例如改成 py -3.8 ) 拷成 poetry38.bat

@echo off
py -3.8 "%USERPROFILE%\.poetry\bin\poetry" %*

就可以生成 Py3.8 的虚拟环境。我的 Windows 里各种用 poetry 整的 3.6 、3.7 、3.8 的虚拟环境。
renmu123
2020-11-02 12:49:50 +08:00
@yucongo #8 说错了应该是 pyenv 在 win 不能用
numoone
2020-11-04 17:45:06 +08:00
conda 的虚拟环境管理就很好用啊。在 linux 的话,直接 copy 虚拟环境目录到另外一台设备上就能直接使用。
endpain
2020-11-04 19:47:00 +08:00
建议还是用 conda 吧~深入了解使用一下还是很不错的。
HAluelue
2020-11-08 13:22:19 +08:00
我一般是用 requirements.txt- -

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

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

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

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

© 2021 V2EX