2011-09-10 38 views
34

我試圖通過類似下面的shell腳本激活VIRTUALENV但它似乎沒有工作,使用shell腳本激活VIRTUALENV似乎不工作

#!/bin/sh 
source ~/.virtualenvs/pinax-env/bin/activate 

我得到以下錯誤

$ sh virtualenv_activate.sh 
virtualenv_activate.sh: 2: source: not found 

但如果我在終端中輸入相同的命令似乎工作

$ source ~/.virtualenvs/pinax-env/bin/activate 
(pinax-env)[email protected]:$ 

所以我改變了作爲建議shell腳本

#!/bin/bash 
source ~/.virtualenvs/pinax-env/bin/activate 

和使用

$ bash virtualenv_activate.sh 
[email protected]:$ 

運行該腳本。

這不會引發錯誤,但同樣沒有激活的虛擬ENV

那麼如何解決這個問題的任何建議?

PS:我使用Ubuntu 11.04

+1

嘗試'bash virtualenv_activate.sh' – arunkumar

+1

可否請您詳細說明並將其作爲答案發布。 – Gautam

回答

39

SH是不一樣的bash(儘管有些系統只是鏈接SH打壞,因此運行SH實際運行的bash)。你可以把sh看作是bash的淡化版本。有一件事bash有這個sh不是「源」命令。這就是爲什麼你會得到這個錯誤......源碼在你的bash shell中運行良好。但是,當您使用sh啓動腳本時,可以在子進程中的shell中運行腳本。由於該腳本在sh中運行,因此找不到「源」。

解決方法是在bash中運行腳本。更改第一行...

#!/bin/bash 

然後用運行...

./virtualenv_activate.sh 

......或者......

/bin/bash virtualenv_activate.sh 

編輯:

如果你想激活virtualenv來改變你調用腳本的shell,你需要使用「源」或「點運算符」。這確保了腳本在當前shell中運行(並因此改變了當前環境)...

source virtualenv_activate.sh 

......或者......

. virtualenv_activate.sh 

作爲一個方面說明,這是爲什麼virtualenv總是說你需要使用「源代碼」來運行它的激活腳本。  

+1

或使用相當於來源的承載殼體,即'。 envFile',通常被稱爲'點envFile'。祝你好運;-) – shellter

+1

謝謝,但似乎並沒有解決問題,當我使用bash它不會引發錯誤,但它也不激活virtualenv。您能詳細解釋.envFile – Gautam

+5

當您按照我所示的方式運行這些腳本時,它實際上會創建一個NEW shell,並在該shell中運行腳本。由於「源代碼」腳本的整個要點是要更改當前的shell,因此這樣做會失敗。使用「source virtualenv_activate.sh」或「。virtualenv_activate.sh」運行腳本(請注意第一段時間之後的空間)。 –

3

source是bash中的內置shell命令,在sh中不可用。如果我沒有記錯,那麼虛擬env會執行很多路徑和環境變量操作。即使運行它作爲bash virtualenv_blah.sh不會工作,因爲這將只是在子shell內創建環境。

嘗試. virtualenv_activate.shsource virtualenv_activate.sh這基本上會讓腳本在您當前的環境中運行,並且所有由virtualenv激活修改的環境變量都將可用。

HTH。

編輯:這是一個鏈接,可以幫助 - 您的建議似乎不工作http://ss64.com/bash/period.html

4

在Mac OS X上。

我已經這樣做了。我'不太滿意的解決方案,但無論如何,在這裏分享和希望,也許有人會提出一個更好的:

activate.sh

echo 'source /Users/andi/.virtualenvs/data_science/bin/activate' 

我通過給執行權限:chmod +x activate.sh

我執行這種方式:

`./activate.sh` 

注意到有以ASCII碼96 =`形式是paranthesis(GRAV e口音)