mac os - 如何从bash脚本创建和激活conda(虚拟环境)?

时间:2017-07-13 19:26:03

标签: android bash shell anaconda conda

如何从bash脚本创建和激活conda(虚拟环境)?

我已经阅读了很多堆栈溢出帖子。鉴于我是bash的初学者,他们中没有一个对我有任何意义。此外,他们中的大多数属于virtualenv,而不是conda,这增加了混乱。

我真的不明白源或exec是如何工作的,或者我是否需要将它用于此目的。

我尝试做的就是从bash脚本中创建一个conda虚拟环境,然后激活它。然后在新激活的"环境"上通过bash脚本运行更多命令。

相反,当我运行下面的脚本时发生的是环境已创建,但它未被激活。终端要求提示继续创建虚拟环境(人工输入要求不高)也没有帮助。

这是脚本:

#!/bin/bash
dirname=$1
conda create -n $1 python=2.7
source activate $1

终端显示:

Jills-MBP:Desktop jillr$ bash site_builder.sh blah
Fetching package metadata: ....
Solving package specifications: ..........
Package plan for installation in environment /Users/jillr/anaconda/envs/blah:

The following NEW packages will be INSTALLED:

    openssl:    1.0.2l-0     
    pip:        9.0.1-py27_1 
    python:     2.7.13-0     
    readline:   6.2-2        
    setuptools: 27.2.0-py27_0
    sqlite:     3.13.0-0     
    tk:         8.5.18-0     
    wheel:      0.29.0-py27_0
    zlib:       1.2.8-3      

Proceed ([y]/n)? 

1 个答案:

答案 0 :(得分:1)

解决方案与使用“source”而不是“bash”调用整个脚本一样愚蠢。 UHHHHHHHHGGGG!

而不是

            <ng-container *ngFor="let field of fieldsTable; let i = index">
                <!--condition in the grid-list tag checks if the key filed can be shown -->
                <md-grid-list class="static-column" cols="1" rowHeight="25px" *ngIf="field.$type == GlobalVariables.typeClasses.Static && (field.Name !== '' || showKey)">
                    <md-grid-tile class="field-name-tile theme-primary" *ngIf="!field.IsKey;">
                        {{field.Name}}
                    </md-grid-tile>
                    <md-grid-tile class="field-name-tile theme-primary" *ngIf="field.IsKey && showKey" mdTooltip="Key field used to update data for this row via the api, values must be unique.">
                        <md-icon>vpn_key</md-icon>
                    </md-grid-tile>
                    <md-grid-tile class="static-field-tile theme-accent-alternating " *ngFor="let content of field.ContentData; let i = index">
                        <md-input-container class="content-data-input">
                            <input class="field-input" mdInput (keyup)="content.Value=$event.target.value" value="{{content.Value}}">
                        </md-input-container>
                    </md-grid-tile>
                </md-grid-list>
            </ng-container>

使用

bash site_builder.sh blah

如果有人真正解释了为什么这会解决它,那将是非常奇妙的,因为我仍然不明白“来源”在做什么。

https://superuser.com/questions/46139/what-does-source-do says“source是一个bash shell内置命令,它在当前shell中执行作为参数传递的文件的内容。”

与其他shell相反?

“源脚本在当前shell环境中读取并执行来自filename的命令”

他们将执行哪些其他shell?

什么shell是“bash site_builder.sh blah”反对“source site_builder.sh blah”??