conda, python pkgs and c++ libs



据我所知,我相信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++libary libfoo,那么conda install pyfoo将再次将libfoo安装到~/miniconda/envs/<env-name>/lib/<python-version>
  3. 如果使用apt安装python pkgs,则安装路径将为/usr/lib/<python-version>,而conda找不到它们

我的问题是:

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

您所说的是正确的:Conda几乎总是会带来自己的依赖项。例外的是使用shell包,但我只知道mpich存在这种情况。

否则,主要问题的答案,">我可以自带共享的libs吗";,实际上是。这是因为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在引擎盖下所做的所有冗余减少。这也意味着您的许多软件包仍将在本地编译,而Conda预编译所有内容,这就是安装速度如此之快的原因。虽然有更多的Pip包在运行,但它们本质上是静态构建,这意味着对本应共享的库进行了更多不必要的复制。

相关内容

最新更新