V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
rationa1cuzz
V2EX  ›  Python

不懂就问, conda 是个啥?和 pip 有啥优势?如何解决跨平台和离线问题

  •  
  •   rationa1cuzz · 2021-05-26 16:08:53 +08:00 · 4636 次点击
    这是一个创建于 1268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网上找了一圈都是如何安装和下载包
    重新部署的话大致流程是先安装 anaconda/miniconda 然后用从本地导出的 yaml 文件重新拉,其本质是不是也是重新下载包 是不是跟我 pip install -r res.txt 是一致的
    而离线安装的话我 pip 也可以先把包下载到本地,然后通过--no-index --find-links=./offine_package 等方式实现离线安装,conda 的话好像是拷贝一下文件即可
    不知道 conda 有什么优势?
    第 1 条附言  ·  2021-05-26 17:26:57 +08:00
    总结一下:
    1 、conda 可以管理不同版本 python 的依赖 例如:python27/python35/python36
    2 、可以管理二进制依赖 例如:依赖 cuda9.0 cuda10.0
    3 、某些无法使用 pip 或者比较麻烦的包的安装 例如:mkl 二进制包
    4 、可以记录环境改动 例如:不小心安装或卸载了包 可以回退
    24 条回复    2021-05-27 16:37:17 +08:00
    Raven316
        1
    Raven316  
       2021-05-26 16:10:36 +08:00   ❤️ 1
    可以有很多个独立的环境?切换方便?我也不太懂
    rationa1cuzz
        2
    rationa1cuzz  
    OP
       2021-05-26 16:10:39 +08:00
    不会有非科学运算的人用 Anaconda 吧,默认带的包也太多太大了?
    Raven316
        3
    Raven316  
       2021-05-26 16:10:54 +08:00   ❤️ 1
    我 conda 安装包老是装不上,实际都用 pip 装的
    est
        4
    est  
       2021-05-26 16:13:32 +08:00   ❤️ 1
    @rationa1cuzz 可以换 miniconda 。

    conda 是可以切 python.exe 以及非 py 的依赖,pip 只能切 py 的依赖
    rationa1cuzz
        5
    rationa1cuzz  
    OP
       2021-05-26 16:13:46 +08:00
    @Raven316 我网上看 conda 的包比较少,自己还没使用过
    rationa1cuzz
        6
    rationa1cuzz  
    OP
       2021-05-26 16:16:02 +08:00
    @est 那优势在于切不同版本 python 的环境,这样来说对于 virtualenv 而言确实很不错,如果我只有一个 python 版本岂不是没有任何优势[手动狗头]
    jimages
        7
    jimages  
       2021-05-26 16:22:16 +08:00 via Android   ❤️ 1
    miniconda 的优势在于他不仅管理了 python 的依赖,还管理了二进制依赖,例如你要装一个包,这个包依赖了 cuda9.0,而你的另外一个包依赖于 cuda10.0,那么你就需要在本机上安装 cuda9.0,cuda10.0,对于一个小白用户来说,这种依赖不同二进制库何解?第场景,numpy 如果想用 mkl 的话,目前 pip 无解,只能下 openblas 的,除非手动编译,如果要手动编译,那就得安装 mkl,改配置文件,然后手动编译,而在 anaconda 上只需要 conda install,会自动安装 mkl,下载编译好的带 mkl 的 numpy 。同理依赖不同版本的 cudnn 也是一样的。
    est
        8
    est  
       2021-05-26 16:38:52 +08:00   ❤️ 1
    @rationa1cuzz conda 有一些二进制包更方便。适合手残自行编译困难的。。。
    IgniteWhite
        9
    IgniteWhite  
       2021-05-26 17:04:55 +08:00 via iPhone   ❤️ 1
    楼上提的差不多了。我说一些小细节:

    conda 能记录环境的改动,如果不小心安装或者卸载了包和依赖,能查看 revision 历史然后回到某个版本。

    另外,有些时候 conda-forge 收录包不如 PyPI 及时,如果想在同一个 conda 环境里安装这些包,只能在 conda 里面安装 pip,再用 pip 安装, @Raven316 提到了。

    我个人还是优先使用 pyenv,它能装更多种不同的 Python 版本,包括 Anaconda/Miniconda 。如果使用了带 conda 的,pyenv 会在管理环境的时候会优先调用 conda 进行管理。

    conda 在 solve environment 的时候,有时会特别慢。可以了解一下 mamba,一个对 conda 基于 C++的重新实现。
    justaman
        10
    justaman  
       2021-05-26 17:11:21 +08:00   ❤️ 1
    我也来吐槽下
    conda 还是给数据科学用比较合适,深度学习啥的
    一般情况,感觉 pip 更好用,简单且够用了
    最让我感觉难受的是,库经常下不动,要配置源很麻烦,还有 https 的问题
    之前遇到两种情况用 conda,1.pip 装不了只能用 conda 装,2.conda 可以指定 python 版本
    yuruizhe
        11
    yuruizhe  
       2021-05-26 17:33:42 +08:00
    依稀记得,conda 的目标好像不止于此,好像甚至可以管 apt 的包,java 的包等等,要做一个超级包管理器。。。好像是,记不太清了
    nightwitch
        12
    nightwitch  
       2021-05-26 18:05:44 +08:00   ❤️ 1
    conda 不仅是一个 python 的包管理器,包括很多常用的包,比如高版本的 gcc 。
    这在没有 root 权限的机器上非常方便
    karloku
        13
    karloku  
       2021-05-26 18:41:51 +08:00
    pyenv+1
    windows 上以前还会用 conda, 现在都在 WSL 里装 linux 版了.

    之前在 linux 里用 miniconda 主要 intel 自家优化过的 python 分发只在 intel 的 conda channel 上分发. 但是那个分发版本更新太慢了, 慢慢就不用了...
    codepark
        14
    codepark  
       2021-05-26 19:00:31 +08:00
    pyenv
    CEBBCAT
        15
    CEBBCAT  
       2021-05-26 19:02:57 +08:00 via Android
    “不懂就问”不是你就在这硬发水贴的理由
    locoz
        16
    locoz  
       2021-05-26 19:14:57 +08:00
    Conda 能管的更多一些,如果只管理 Python 包的话,Poetry 目前个人感觉最爽。
    imn1
        17
    imn1  
       2021-05-26 19:25:18 +08:00
    windows 至今没解决一些包怎么装,例如 sparse_dot_topn,搜了一下是国际问题
    所以转到 miniconda 下
    pip 显示是 cl.exe 找不到,但根本和 cl.exe 无关,用源码编译就能看到实际上是很多编译相关的 dll 找不到,copy 这个 dll 到源码目录就会报另一个 dll 找不到……那些 dll 的路径在环境变量 path 里面都有的,搜了一遍无解

    conda 预装太多的包,我这里很容易卡死,安装包时分析环境(依赖)转圈圈可以长达几十分钟到几小时,也是国际问题,miniconda 装相同的包才几分钟

    另外,conda 不要一开始就装 opencv,总是报 cv2.cv2 找不到 module,要放到最后装,或者最后重装一遍(更新了某些包出现这个问题的话,也是要重装一遍 opencv )
    shayuvpn0001
        18
    shayuvpn0001  
       2021-05-26 19:30:30 +08:00
    conda 建立环境,pip 安装包,conda 打包移植。(尽量不要用 conda 源的包,数量比 pip 少,国内镜像比 pip 少,更新也比 pip 慢一点。)

    conda 是真好用。。。目前总结下来的最佳实践。
    sinux
        19
    sinux  
       2021-05-26 20:02:07 +08:00
    你把 conda 理解成 brew,然后把 pip 理解成 pip /npm 就行了。
    philipjf
        20
    philipjf  
       2021-05-26 20:22:55 +08:00 via iPhone
    最近正好刚接触,说一下使用心得;应用场景就是 tensorflow 跑一些简单模型,个人电脑用的是 Mac,一开始图省事就直接用官方的 docker 镜像在容器里跑。
    后来因为发热实在扛不住,跟学校 it 申请了个虚拟机打算装 ubuntu,谁知道给的直接是个 windows server,访问权限还只给了远程桌面,连 SSH 都禁用了,还不给管理员权限。
    一开始打算还是装个 docker 用,结果不知道什么原因 docker desktop 装不上,然后找到巨硬官方的 docker 容器插件,装上发现由于版本过旧( 1809 ),不支持 wsl2,所以只能运行 Windows 容器,遂作罢。
    然后打算用 tensor flow 官方安装说明的 env 虚拟环境,但是虚拟环境的安装路径还得手工管理。
    最后别人给我推荐了 anaconda,安装无需管理员权限,也能自动管理虚拟环境的安装路径,还能通过导出配置文件在不同机器上快速部署相同的环境,虽然没用上其他强大功能,但也算帮助我完成了任务。
    linvaux
        21
    linvaux  
       2021-05-26 22:54:12 +08:00
    等你同时开发多个项目的时候,就会发现 conda 简直贼香
    THESDZ
        22
    THESDZ  
       2021-05-27 09:48:36 +08:00
    前面说 conda 多项目的,想问下
    py -3 -m venv env
    这个命令是干嘛的?
    非 python 开发人员,入门级选手
    IgniteWhite
        23
    IgniteWhite  
       2021-05-27 16:34:56 +08:00 via iPhone
    @THESDZ 在当前目录创建一个叫 env 的文件夹,爱你在这个文件夹里面初始化虚拟环境。更普遍的写法是 python3 -m venv <path_to>/env,明确制定 env 的路径。

    如果使用 pyenv 的插件 pyenv-virtualenv 的话,创建管理环境更加的方便。根据后者文档:

    (关于 Python 的 virtualenv 和 venv 模块)
    There is a venv module available for CPython 3.3 and newer. It provides an executable module venv which is the successor of virtualenv and distributed by default.

    pyenv-virtualenv uses python -m venv if it is available and the virtualenv command is not available.

    (关于 conda )
    If conda is available, pyenv virtualenv will use it to create environment by conda create.

    可见 pyenv-virtualenv 会在台面下使用 python 和 conda 各自的命令创建虚拟环境。台面上使用的时候,只需要用 pyenv 的命令就行了,方便。还有很多其他方便的地方和高级用法,比较推荐 pyenv 。
    IgniteWhite
        24
    IgniteWhite  
       2021-05-27 16:37:17 +08:00 via iPhone
    @IgniteWhite *爱你在这个文件夹里面->并在这个文件夹里面

    九宫格输入法令人感动= =
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:47 · PVG 14:47 · LAX 22:47 · JFK 01:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.