【问题标题】:Bash and Conda: Installing non-conda packages in conda environment with executable bash scriptBash 和 Conda:使用可执行 bash 脚本在 conda 环境中安装非 conda 包
【发布时间】:2017-12-12 20:00:47
【问题描述】:

我正在编写一个 bash 脚本,目的是将其托管在计算集群上。我希望脚本为执行它的任何用户创建一个 conda 环境,以便我们团队中的每个人都可以快速设置相同的工作环境。

我意识到这对于必要的命令数量来说有点矫枉过正,但我​​想练习一些 bash 脚本。到目前为止,这是我的脚本:

#!/bin/bash

# Load anaconda
module load Anaconda/4.2.0

# Create environment
conda create -n ADNI

# Load environment
source activate ADNI

# Install image processing software
pip install med2image

echo 'A working environment named ADNI has been created.'
echo 'Please run `source activate ADNI` to work in it.'

此脚本成功创建环境。但是,在运行脚本后加载环境后,我会运行 conda list 以查看其中加载了哪些包并获得以下输出:

(ADNI) MLG-BH0039:ADNI_DeepLearning johnca$ conda list
# packages in environment at /Users/johnca/miniconda3/envs/ADNI:
#

(ADNI) MLG-BH0039:ADNI_DeepLearning johnca$ 

这给我的印象是环境中没有加载任何包。它是否正确?如果是这样,我该如何更改脚本,以便将所需的包成功安装到指定的环境中。

谢谢!

【问题讨论】:

  • 首先加载/激活新创建的 conda 环境,然后使用 pip 安装med2image
  • @AafaqueAbdullah 我最初尝试使用代码:# Load environment source activate ADNI # Install image processing software pip install med2image 但它没有用。
  • “它没有用”是什么意思?
  • @darthbith 抱歉含糊不清,我将编辑问题以按该顺序反映代码并描述输出。感谢您的帮助。

标签: linux bash shell anaconda


【解决方案1】:

通过创建一个包含所有所需包的 environment.yml 文件,我设法找到了一种更好的方法来自动化这个过程。这也可以包括 pip 包。我的文件如下所示:

name: ADNI
channels:
- soumith
- defaults
dependencies:
- ca-certificates=2017.08.26=h1d4fec5_0
- certifi=2017.11.5=py36hf29ccca_0
- cffi=1.11.2=py36h2825082_0
- freetype=2.8=hab7d2ae_1
- intel-openmp=2018.0.0=hc7b2577_8
- jpeg=9b=h024ee3a_2
- libffi=3.2.1=hd88cf55_4
- libgcc=7.2.0=h69d50b8_2
- libgcc-ng=7.2.0=h7cc24e2_2
- libgfortran-ng=7.2.0=h9f7466a_2
- libpng=1.6.32=hbd3595f_4
- libstdcxx-ng=7.2.0=h7a57d05_2
- libtiff=4.0.9=h28f6b97_0
- mkl=2018.0.1=h19d6760_4
- numpy=1.13.3=py36ha12f23b_0
- olefile=0.44=py36h79f9f78_0
- openssl=1.0.2n=hb7f436b_0
- pillow=4.2.1=py36h9119f52_0
- pip=9.0.1=py36h6c6f9ce_4
- pycparser=2.18=py36hf9f622e_1
- python=3.6.0=0
- readline=6.2=2
- scipy=1.0.0=py36hbf646e7_0
- setuptools=36.5.0=py36he42e2e1_0
- six=1.11.0=py36h372c433_1
- sqlite=3.13.0=0
- tk=8.5.18=0
- wheel=0.30.0=py36hfd4bba0_1
- xz=5.2.3=h55aa19d_2
- zlib=1.2.11=ha838bed_2
- pytorch=0.2.0=py36hf0d2509_4cu75
- torchvision=0.1.9=py36h7584368_1
- pip:
  - cycler==0.10.0

然后我可以通过引用此文件来自动创建环境,如下所示:

#!/bin/bash

# Load anaconda
module load Anaconda/4.2.0

# Create environment
conda env create -f adni_env.yml

echo ' '
echo 'A working environment named ADNI has been created or updated.'
echo 'If working on the cadillac server please `module load Anaconda/4.2.0`.'
echo 'Then run `source activate ADNI` to work within the environment.'
echo ' '

我希望这可以帮助将来可能遇到类似问题的任何人。

【讨论】:

    【解决方案2】:

    命令

    conda create -n ADNI
    

    创建一个没有安装包的环境,甚至没有安装 Python 或 pip。因此,尽管激活了环境,您仍在使用出现在您的PATH 上的其他点子。您需要先将 pip 或 Python 安装到环境中,无论是在创建环境时还是之后使用 conda install 命令

    conda create -n ADNI python=3.6
    

    会安装Python,创建环境时会带上pip 或者

    conda create -n ADNI
    conda install -n ADNI python=3.6
    

    之后会安装 Python。

    在最好的情况下,您会使用 conda 来安装该软件包。从 pip 包创建 conda 包并将其上传到 Anaconda.org 上的频道以便您的团队可以访问它并不难。

    【讨论】:

    • 我已将呼叫调整为 conda create -n ADNI python=3.6,但在我的 ADNI 环境中查看 conda list 时,我仍然得到一个空的包列表。
    • 我不确定为什么会发生这种情况,而且我无法在这里重现这种行为......对我来说,create 命令添加了 Python 和一堆依赖项,列表命令显示了这些。创建环境时显示的输出是什么?
    • 感谢您的帮助。我设法找到了一个不一定是完整解决方案的解决方法。我会将其作为解决方案发布在下面,以防将来任何用户遇到类似问题。
    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2014-01-22
    • 2022-08-03
    • 1970-01-01
    • 2018-01-31
    相关资源
    最近更新 更多