[吐槽] conda 真是太难用了! 如何优雅地管理 Python 环境?

2023-05-09 17:45:25 +08:00
 vituralfuture

如题,已经在 anaconda 上折腾了不知道多久,我现在已经彻底放弃使用 conda 了,看到一个比较新的包管理器 pdm ,但是 pycharm 现在还不支持,所以就用 virtualenv 了

首先,我的机器是 archlinux ,然后现在还是大二学生,SRTP 项目是机器学习方向的,然后其他比赛也需要用到 numpy, pandas, pytorch 这一堆东西

当我还在用 windows 时,根本不 care 什么虚拟环境,啥包都是无脑装到系统解释器,当时需要的科学计算有关的库,最多就是 numpy,pytorch.matplotlib 这些东西,也没有啥版本要求,直接用最新的版本,用的库也不是很多,这种方法没啥问题

然后主力切换到 linux 后,我发现 linux 的 python 系统解释器很重要,因为它是系统依赖之一,也出现过不规范操作,导致 python 一个解析 JSON 的库出错,然后 pip 依赖这个库,导致 pip 也不能工作,还有一次手贱卸载了一个不知道是干啥用的库,导致有些软件用不了了,从此我只敢在系统解析器安装 requests 这种比较小的库,用来写爬虫,其他都安装到虚拟环境

后来,因为想尝试一下 conda ,所以我安装了 conda ,遇到第一个问题就是,安装后在我的 shell 里没有 conda 这个命令,然后网上找到的教程,他们的 conda 基本都是安装到用户的家,而我安装到 /opt 下的,没法借鉴。后来我从 aur 里发现,打包的人说“为了不污染环境,把 conda 作为一个函数在 shell 中调用,导入这个函数需要执行一个脚本”,然后我把这个脚本加到了~/.zshrc里,登录就执行一遍,这个问题折腾了几小时

再后来,我发现 conda 安装库老是卡死,先声明,我已经搭建了一个透明代理的环境,网络是不存在问题的,它总是卡在解析依赖的地方,实在不想等

有一次 archlinux 系统更新的时候,archlinux 的包管理器 pacman 检测到/opt/anaconda/...下面很多头文件冲突了,没法安装系统更新,我在 reddit 找到了类似的问题,解决办法:卸载 conda ,安装系统更新,重新安装 conda 。 代价就是,我的一堆环境全部重新安装。。。

最后一次,也就是一天前,我执行一行代码,从 raw.githubusercontent.com 下载一个 scv 文件,遇到一个问题:ssl 证书不能验证

其实之前我就发现,当我进入 conda 的环境时,使用curl命令,用的不是系统的 curl,而是/opt/anaconda/bin/curl命令,然后使用 curl 命令从 raw.githubusercontent.com 下载一个文件时,也出现了同样的问题:ssl 证书不能验证。当时我用/usr/bin/curl来简单地避开了这个问题

但是,这次 python 代码需要从 raw.githubusercontent.com 下载 csv 文件,没有一个方法能 workaround 掉这个问题,然后我 google 了几小时,大概是"conda ssl", "conda ssl certificate", "conda curl ssl", "conda lack of ssl certificate”,都没有找到这个问题

我尝试过:

  1. 浏览器打开 raw.githubusercontent.com ,导出 pem 文件,加入到 conda 环境下的 ssl 证书文件末尾
  2. 复制系统的 ssl 证书,覆盖 conda 的证书文件

都没有 work
所以我再也不想使用 conda 了,浪费了我太多时间在这些没用的地方

最开始考虑使用 docker 管理 python 环境,但是有两个问题

  1. docker 里的 python 解释器,它能运行图形化界面吗?比如 PyQt ,matplotlib 等等,这个问题我没有试过,存疑
  2. pycharm 怎么使用 docker 里的解释器?我尝试过,似乎是这么一个逻辑,创建 docker 容器时添加了一个-rm 参数,退出容器时自动销毁,下次进入时,会从 docker image 重新创建一全新的容器,优点就是这个容器是绝对干净的,缺点就是:1. 安装的其他库都会随着 docker 容器一起被删除 2. 有时候需要对库文件作出修改,比如 matplotlib 不能画中文图表,需要对库文件作出修改才能画

现在作为一个折中,使用 virtualenv ,这个东西好用吗?我想其实也不太好用 因为每次进入都太麻烦了!

大佬们是如何解决的?求指点!

9152 次点击
所在节点    Python
90 条回复
vituralfuture
2023-05-09 19:42:32 +08:00
@Ricardoo 谢谢谢谢
第一个问题,这确实是,还是应该去用官方的,aur 用习惯了 ,里面有些包不太好用确实比较正常,毕竟不保证可用

第二个问题,这个还是我孤陋寡闻了,我之前模模糊糊地有这个想法,就是 conda 和 pip 不能混用,后面我看到老师演示安装包的时候直接 pip ,我还很震惊,问了他,他说可以,然后后面有一个项目用到的库 conda 没有,无奈用 pip 安装了,难怪会卡在解析依赖这一步

似乎我使用 conda 遇到的很多问题似乎都是 aur 的包的问题
我使用 conda 的方式还是不对,确实该多读读文档,RTFD
knightdf
2023-05-09 19:49:30 +08:00
就 virtualenv+virtualenvwrapper 吧,最简单好用
BBCCBB
2023-05-09 19:53:02 +08:00
还是好好学 conda 吧, 至少你得看看他的入门教程和文档..
0o0O0o0O0o
2023-05-09 19:57:28 +08:00
devcontainers
iorilu
2023-05-09 19:59:01 +08:00
我觉得 miniconda 很好,其他的可能问题更多
levelworm
2023-05-09 20:04:40 +08:00
Pycharm 基本上都自动化了
SJ2050cn
2023-05-09 20:08:47 +08:00
不只针对 Python 环境,超算上一般都用 module 来管理各种软件,系统环境都是很纯净的,要用哪个软件适时加载。
Corey0606
2023-05-09 20:11:26 +08:00
配好多个版本环境的环境变量 虚拟环境也挺香
Muniesa
2023-05-09 20:16:17 +08:00
@vituralfuture 有 curl 是因为 conda 不仅仅是 Python 的包管理器,gcc 什么的都可以通过 conda 装,curl 应该是 anaconda 预装的一堆包里的一个
morton098
2023-05-09 20:16:21 +08:00
现在用的 poetry
pipecat
2023-05-09 20:19:19 +08:00
同使用 micro-mamba 。解析速度对比 conda 提升非常明显,conda 命令无缝切换,推荐尝试。
ryan4yin
2023-05-09 20:21:33 +08:00
建议用 docker ,这本质是一个环境冲突问题。
ulosggs
2023-05-09 20:22:43 +08:00
用 conda 注意以下三点,几乎不会出现问题
1. 下载官网的 Miniconda , 安装到用户目录
2. 只要能用 conda 安装的包都用 conda 安装,避免使用 pip 。尤其是基础包
3. 使用 conda activate/deactivate 切换环境,不要手动设置 PATH ,LD_LIBRARY_PATH

然后 resolving 慢的问题,可以使用 libmamba ,解析依赖速度飞快
conda install -n base conda-libmamba-solver
conda config --set solver libmamba
14
2023-05-09 20:37:51 +08:00
我也是 pyenv + poetry
coolair
2023-05-09 20:38:39 +08:00
@ulosggs 请问下大佬,用 conda 从 requirements.txt 安装包,从没有成功过是为啥?谢谢。

报错如下:

> conda install --yes --file requirements.txt
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.

PackagesNotFoundError: The following packages are not available from current channels:

- gradio==3.28.3
- icetk
- cpm_kernels
- layoutparser
- transformers==4.27.1
- unstructured
- faiss-cpu
- peft
- langchain==0.0.146
- fastapi
- sentence-transformers
- accelerate

Current channels:

- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/win-64
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/noarch
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/win-64
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

https://anaconda.org

and use the search bar at the top of the page.
pljhonglu
2023-05-09 20:42:03 +08:00
用了 [rtx]( https://github.com/jdxcode/rtx) 之后就丢掉了 pyenv 、nvm 、rbenv 。
lululau
2023-05-09 20:53:52 +08:00
有管理不同版本 Intepreters/Packages 的需求的话,就别用 Python 了,感觉 virtualenv/anaconda/pyenv/pipenv/poetry 这些工具对于 Python 开发者来说太复杂了,Python 要的就是一个简单
ospider
2023-05-09 20:56:16 +08:00
你这明明是墙的问题,赖到 conda 头上……
swhhaa
2023-05-09 20:59:19 +08:00
我用 poetry + pyenv.... 说实话确实感觉挺复杂的
sunrisewestern
2023-05-09 22:42:52 +08:00
老老实实 conda 官方教程装一遍,上面的问题基本解决了。
solver 可以换成 libmamba ,也有官方文档的说明。
项目使用非 base 环境,不同项目不同环境,能减少包安装解析的压力,也能规避 curl 的问题

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

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

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

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

© 2021 V2EX