linux离线克隆conda

Posted jasonzhangxianrong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux离线克隆conda相关的知识,希望对你有一定的参考价值。

项目场景:

我们用Anaconda创建了虚拟环境,并且想通过U盘拷贝的方式实现虚拟环境的迁移,可以通过虚拟环境打包的方式来实现。

迁移环境打包

1.首先要安装一个打包工具

conda install -c conda-forge conda-pack

2.进入到开发环境
进入到开发环境中去

source activate **** 或者  conda activate ****  # 不同的Anaconda版本这个命令会有区别

开始打包

conda pack -n 虚拟环境的名字 -o output_name.tar.gz

至此,会生成一个tar的虚拟环境的包

环境拷贝
使用scp 或者U盘拷贝的方式,总之要拷贝到你想要安装的地方。
在Anaconda3/envs目录下新建一个文件夹:例如YOLOV4.将tar解压到刚刚新建的YOLOv4文件中

tar -xzvf output_name.tar.gz -C Anaconda3/envs/YOLOV4/

验证

使用

conda env list

你就会看到虚拟环境中多了一个YOLOV4的虚拟环境

传输

使用

conda env list

你就会看到虚拟环境中多了一个YOLOV4的虚拟环境

scp  -P 50101 python-37-zxr.tar.gz zhangxianrong@222.201.144.1**:/home/zhangxianrong

 

如何在 conda 环境中用克隆的 GitHub 版本替换 libprotobuf 的 conda 包

【中文标题】如何在 conda 环境中用克隆的 GitHub 版本替换 libprotobuf 的 conda 包【英文标题】:How can I replace the conda package for libprotobuf with the cloned GitHub version within a conda environment 【发布时间】:2020-01-27 22:49:46 【问题描述】:

我正在尝试在conda 环境中安装caffeCaffe 需要 Google 的 protobuf 包。我已经有 git clone'd protobuf 并将它放在我的 \usr 目录中。但是,当我尝试在 conda 环境中安装 caffe 时,安装的 libprotobuf 版本无法正确地将 proto 文件转换为 c++ 代码。

考虑以下代码:

syntax = "proto2";

package test1;


message Datum 
  optional int32 channels = 1;

当我尝试从我的 base 环境中翻译它时,一切都很好:

(base) me@balin:~/Projects/caffe$ make clean
(base) me@balin:~/Projects/caffe$ make superclean
Deleting the following generated files:
./temp5.pb.cc
./temp5.pb.h
(base) me@balin:~/Projects/caffe$ protoc --cpp_out=. temp5.proto
(base) me@balin:~/Projects/caffe$ g++ temp5.pb.cc -c
(base) me@balin:~/Projects/caffe$ 

但是,当我在要用于caffe 的环境中尝试相同的操作时,我得到了以下结果:

(dnn_track5) me@balin:~/Projects/caffe$ make clean
(dnn_track5) me@balin:~/Projects/caffe$ make superclean
Deleting the following generated files:
./temp5.pb.cc
(dnn_track5) me@balin:~/Projects/caffe$ protoc --cpp_out=. temp5.proto
(dnn_track5) me@balin:~/Projects/caffe$ g++ temp5.pb.cc -c
temp5.pb.cc: In member function ‘virtual const char* test1::Datum::_InternalParse(const char*, google::protobuf::internal::ParseContext*)’:
temp5.pb.cc:150:58: error: ‘ReadVarint’ is not a member of ‘google::protobuf::internal’
           channels_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
                                                          ^~~~~~~~~~
temp5.pb.cc:150:58: note: suggested alternative: ‘ReadVarint32’
           channels_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
                                                          ^~~~~~~~~~
                                                          ReadVarint32

我能想到的就是将conda 安装的~\anaconda2\envs\dnn_track5 子目录中的每个文件替换为我从GitHub 克隆构建protobuf 时安装的文件。我在这方面是否正确(我对此表示怀疑)。

如何创建一个 conda 环境,我可以在其中使用 caffe 并且仍然可以使用 protobuf

【问题讨论】:

你从 github 克隆的版本有多大,conda 安装了哪个版本。我不建议弄乱 conda 手动安装的文件 【参考方案1】:

没有直接的方法可以使用 conda 直接从 github 存储库进行安装,因此值得看看为什么您的代码无法在您的 caffe 环境中运行。

截至this commit(从2019年10月开始)有区别

::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64

::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32

当您conda install caffe 时,它会下载(至少对我而言)libprotobuf-3.11.2,这是 2019 年 12 月以来的最新版本,因此作为 caffe 的依赖项下载的版本实际上比您的版本更新尝试在您的代码中使用。

你现在有几个选择:

    请求具有您要使用的 API 的特定版本的 protobuf。 IE。 3.10.0,即 2019 年 10 月 3 日起:

    conda create -n caffe -c conda-forge python=3.7 caffe libprotobuf=3.10.0

    创建一个自定义 conda 通道并将您自己的 libprotobuf.tar.bz2 放入其中

    调整您的代码以使用最新的libprotobuf API

【讨论】:

以上是关于linux离线克隆conda的主要内容,如果未能解决你的问题,请参考以下文章

linux服务器离线安装conda

linux服务器离线安装conda

Linux离线安装包及其依赖库

如何在 conda 环境中用克隆的 GitHub 版本替换 libprotobuf 的 conda 包

Anaconda 常用命令大全

离线创建conda环境