[吐槽] 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 ,这个东西好用吗?我想其实也不太好用 因为每次进入都太麻烦了!

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

9241 次点击
所在节点    Python
90 条回复
ispinfx
2023-05-09 22:54:13 +08:00
都用 Python 了,还要什么自行车呢
paopjian
2023-05-09 23:26:12 +08:00
感觉所有的问题都是不看官方文档,也不用官方发布包...
cy18
2023-05-09 23:39:49 +08:00
就我一个人用 pipenv 的么...
我现在简单命令用 MSYS2/Linux 自带,数据分析处理相关的 Anaconda ,程序开发就用 pipenv 。
alne
2023-05-09 23:45:12 +08:00
@coolair #35 源里没有这几个包呗
指定一下别的源,比如-c conda-forge
chesha1
2023-05-09 23:51:31 +08:00
conda 已经算好用的了,你原来在 Windows 下不在意环境直接硬装,如果要用两个版本的 pytorch ,那怎么办呢

1. 你发现环境装错了,卸载掉原来的,在用户目录下重新装一个不就好了,为什么要折腾自己
不管是用 anaconda 还是 miniconda 还是别的,默认就是装在用户目录的吧,你想装到别的地方反而要手动指定目录,挺奇怪的

2. 卡在解析依赖,可能是你用了 conda install xxx ,用 pip install xxx 就没这个问题了

3. 用 docker 只会比 conda 更麻烦,我唯一知道必须要用 docker 的地方是,nv 的新显卡对于 pytorch 有优化,比如 4090 ,不用 nv 的容器,用 pytorch 官方的 pytorch 性能会下降,不知道 pytorch 官方什么时候才能更新就先用 nv 维护的 pytorch
xdygxh
2023-05-09 23:58:09 +08:00
conda 还难用的话,其他的虚拟环境管理工具只会更难用。
dayeye2006199
2023-05-10 00:47:56 +08:00
virtualenv 把,如果你需要管理多 cuda 版本之类的活的话。
否则还是 conda 用的更无脑一些。
inframe
2023-05-10 01:37:41 +08:00
conda 可以管大版本 3.8 ,3.9 ,3.10 ;
也可以自己下源代码自己编译下,然后单独 virtualenv 拉虚拟环境;在 Windows 上就这么玩的,集齐了官方 Cython 3.7-3.10

virtualenv 管项目,一个项目开一个虚拟包;
XIVN1987
2023-05-10 09:06:57 +08:00
我也觉得 windows 下使用 python 更简单,,
因为 windows 本身完全不依赖 python ,,所以 windows 下可以随意更新 python 、python 包而不用担心导致系统崩溃。。
jakehu
2023-05-10 09:15:29 +08:00
pyenv
tach1koma
2023-05-10 09:19:52 +08:00
miniconda 只用来管理环境,每个环境里用 pip 管理包
guoli100
2023-05-10 09:39:21 +08:00
pyenv
mogazheng
2023-05-10 09:41:20 +08:00
墙的问题,至少你这个 github 域名的问题就是。
命令行环境要设置 http_proxy 环境变量墙才能生效, 可以 curl 验证下。
然后老实安装官方的 conda 。
整完后基本上不会有什么正常使用的问题。
不要轻易怀疑一个能流行起来的东西,难道大家都是忍着在用的吗。
mingwiki
2023-05-10 11:22:34 +08:00
python3 已经集成了 venv 通过 python3 -m venv .使用 不用安装任何东西非常方便 https://www.liaoxuefeng.com/wiki/1016959663602400/1019273143120480
air00dd
2023-05-10 11:25:33 +08:00
@XunjieL 请问 poetry 为什么要“记得换源”,有什么说法吗?
cherryas
2023-05-10 11:48:28 +08:00
原生 Python venv 不好吗?
alne
2023-05-10 12:51:11 +08:00
@cherryas 不好,一堆二进制包怎么管理
iorilu
2023-05-10 12:52:35 +08:00
@cherryas 两码事,conda 可以指定不同版本 python ,比如一个项目用 3.6 一个项目用 3.10
crsmk01
2023-05-10 13:32:20 +08:00
miniconda
dcoder
2023-05-10 13:36:06 +08:00
conda 都难用... 那 docker + remote debugger 不得更难用...

conda 要用的话, 要求一整套都得用它的, 你好好看看文档.
还有, 看看翻墙的 VPN 是不是太慢

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

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

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

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

© 2021 V2EX