请教下 Python 上的包管理器和虚拟环境

251 天前
 jqtmviyu

刚学 python, 对这方面不是很了解. 对 npm 比较熟悉, 所以拿 npm 来类比.

  1. 流行的 python 版本管理器是 pyenv 吗? 类似 nodejs 上的 fnm n nvm
  2. 流行的 env 环境是 3.3 开始自带的 venv 吗? 还是 poetry (感觉用起来很麻烦)
  3. 有类似 pnpm 使用硬链接减少磁盘占用的方案吗?
  4. 有办法让 shell(zsh) 进入目录自动 activate env 吗? 类似识别 .nvmrc 文件自动切换

目前是使用 pyenv + venv

  1. vscode 能自动切换版本, 但 shell 方案没找到
  2. pyvenv.cfg里都是绝对路径,python 版本或者项目改名/移动路径岂不是很麻烦
  3. 测试新建项目, pip install -r requirements.txt 又从网络重下了一遍

是我搜索能力太差还是本来就这样, 怎么感觉比 js 生态还原始.

5754 次点击
所在节点    Python
45 条回复
selfeasy
251 天前
在尝试使用 rye ,但 vscode 不能自动识别 rye 安装的 python 解释器
knightdf
251 天前
poetry+pyenv
l1xnan
251 天前
rye + uv + ruff 用起来还算流畅
julyclyde
251 天前
1 以 python 的发展速度,似乎多版本管理器并没什么价值啊?
4 那其实开销更大,需要在 PS1 里做手脚吧
Easedge
251 天前
第四个问题 direnv 可以做到,非常简单
qYs9wxnXG96c6z1t
251 天前
我一般是 pyenv + pipenv
imycc
251 天前
就我个人而言,pyenv + pyenv 的 virtualenv 就足够。
pyenv virtualenv 的组合很方便,在项目目录下设置下 pyenv local 指定你要用的 venv ,vscode 之类的可能也要选一下,设置一次之后就没有什么烦恼了。
zzhaolei
251 天前
4 可以自己设置 zsh 的 cd hook ,当发现当前目录有 venv 或者 .venv 就自动 source
574402766
251 天前
4 pyenv 和 conda 应该都能做到
iorilu
250 天前
自己玩玩可以折腾

如果正式环境或公司开发建议用 miniconda, 不建议花时间在折腾这事上面
TArysiyehua
250 天前
jqtmviyu
250 天前
@zhanghua0 #17 poetry 似乎会绑定当前的 python 环境, 官方文档也说需要单独提供环境.

这可能导致问题就是, 你在 3.12.1 安装的 poetry, 后来升级到 3.12.2, 它还是绑定的 3.12.1, 你不能卸载了它.
jqtmviyu
250 天前
@zzhaolei #28 不错. chpwd 钩子
jqtmviyu
250 天前
@Easedge #25 非常棒, 会自动加载卸载, 更简便了.
jqtmviyu
249 天前
感谢楼上的各位: 暂时采纳 pyenv + uv + direnv

pyenv 管理版本
uv 代替 pip, 会优先使用本地缓存
direnv 自动激活 venv
mingwiki
249 天前
@yolee599 #11 最近发现 wsl2 里面的 venv 无法隔离环境,换了 virtualenv 才好。服务器里面的 venv 是正常的。所以推荐 virtualenv
supergeek1
249 天前
@paopjian 差不多的流程,不过我是用的 micromamba 装 python
mMartin
249 天前
用 miniforge https://github.com/conda-forge/miniforge 用清华源 mamba 装包快的一批,我们自建了 conda 源
frostming
249 天前
3. 有类似 pnpm 使用硬链接减少磁盘占用的方案吗?

再说三遍

pdm 支持
pdm 支持
pdm 支持

很遗憾没人知道
zhanghua0
249 天前
@jqtmviyu #32 确实,不过我是在 Linux 这边,poetry 的更新都是交给软件包管理器的,所以这个问题影响不大,Python 更新的时候 poetry 也会一起被更新。
Windows 那边估计真只能自己维护一下每次 Python 更新也要重新装一遍 poetry 了。

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

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

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

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

© 2021 V2EX