【问题标题】:conda, python pkgs and c++ libsconda、python pkgs 和 c++ 库
【发布时间】:2021-12-17 13:29:29
【问题描述】:

据我所知,我相信 conda 对 python pkgs 所做的不超过

  1. 管理python pkg的安装路径和查找python pkgs的路径。 ~/miniconda/envs/$(env-name)/lib//$(python-version)/site-packages/...
  2. 在这些环境间单独的路径中自动安装 python pkgs 的依赖项

我相信:

  1. 如果你使用~/miniconda/bin/pipconda install安装python pkgs,所有的依赖都会安装到~/miniconda/envs/<env-name>/lib/<python-version>~/miniconda/bin/python可以找到它们
  2. 如果 python pkg pyfoo 依赖于已由 apt install 安装到 /usr/lib/<python-version> 的 c++ 库 libfoo,conda install pyfoo 将再次将 libfoo 安装到 ~/miniconda/envs/<env-name>/lib/<python-version>
  3. 如果使用apt安装python pkgs,安装路径为/usr/lib/<python-version>,conda找不到。

我的问题是:

  1. 我说的对吗?
  2. apt install c++ 库是否与安装到 ~/miniconda/envs/<env-name>/lib/<python-version> 的任何 c++ 库冲突,反之亦然?
  3. 我可以只使用 conda 管理不同环境中的 python pkgs 和 apt 管理 c++ pkgs 而不必担心任何冲突吗?这意味着当我构建和运行一个混合(c++ 和 python)项目时,我只需要激活 conda env 和 conda install 所有 python 依赖项和 apt install 所有所需的 c++ 依赖项,一切都会正常工作吗?

【问题讨论】:

  • 可能有点冗长。任何对粗体问题的回答都将受到欢迎

标签: ubuntu conda


【解决方案1】:

你说的是对的:Conda 几乎总是会带来它自己的依赖项。 using a shell package 是个例外,但我只知道 mpich 存在。

否则,主要问题“我可以自带共享库吗?”的答案实际上是。这是因为 Conda 包尽可能多地预编译,这通常会导致对动态库的确切构建的特定符号引用。即使从不同渠道获取动态库也会导致符号丢失的错误。

但是,您可以只使用 Conda 来管理环境,而仍然使用 Pip 来安装库。即使用 Conda 创建 Python 环境,然后使用 Pip 安装 Python 包。比如:

conda create -n my-env python=3.9 pip
conda activate my-env
pip install pkg1 pkg2 ...

但是请注意,这会丢失 Conda 在后台所做的所有 the redundancy reduction。这也意味着您的许多包仍将在本地编译,而 Conda 会预编译所有内容,这就是安装速度如此之快的原因。虽然有更多的 Pip 包在轮子上运行,但它们本质上是静态构建,这意味着对共享库的内容进行了更多不必要的重复。

【讨论】:

  • 非常感谢!所以安装了 conda,1)如果我想在单独的虚拟环境中开发一个纯 python 项目,我应该只使用 conda env 和 conda installpip install 来管理 py 库和 conda 有额外的好处冗余减少。虽然安装 py libs 会导致安装一些共享的 c++ libs,但 conda 会处理它并且不用担心与系统范围的 c++ libs 系统冲突(由apt 安装) 2)如果要开发一个 c++ 项目或 hybird 一个,做不使用 conda env,只需停用 conda env 并安装共享的 c++ 库。
  • 顺便问一下,“对动态库的确切构建的特定符号引用”是什么意思?例如环境变量 $LD_LIBRARY_PATH 吗?
猜你喜欢
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多