2012-04-13 58 views
3

在Arch Linux的,安裝後virtualenvwrapper系統範圍內,通過sudo pip2 install virtualenvwrapper和我的用戶的.bash_profile中添加此,`這virtualenvwrapper.sh螺絲python`了在Arch Linux的

export WORKON_HOME=/home/myuser/.virtualenvs 
export PROJECT_HOME=/home/myuser/work 
source /usr/bin/virtualenvwrapper.sh 

錯誤顯示,每當我推出一個新的shell窗口: -

which: no python in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl) 
-bash: : command not found 
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenv has been installed for VIRTUALENVWRAPPER_PYTHON= and that PATH is set properly. 

這可以追溯到在virtualenvwrapper.sh腳本行50: -

47 # Locate the global Python where virtualenvwrapper is installed. 
48 if [ "$VIRTUALENVWRAPPER_PYTHON" = "" ] 
49 then 
50  VIRTUALENVWRAPPER_PYTHON="$(\which python)" 
51 fi 

並且是與使用python2 for python 2.7安裝的arch linux約定相沖突的結果。

如果我將第50行修改爲which python2,一切正常,每當我啓動一個新的shell時,我都不會看到錯誤消息。

解決此問題的適當方法是什麼?我是否明確檢查當前操作系統是否是arch linux,並引入if-else條件以使用virtualenvwrapper.sh中的哪個python2並將修補程序發送給virtualenvwrapper作者?還是有什麼我可以用我的arch linux機器上的配置來做?

回答

2

要回答這個特定拱蟒蛇怪癖(使用python2的約定),我專門創建的軟鏈接是這樣的: -

ln -s /usr/bin/python2 /usr/local/bin/python 

由於/usr/local/bin先在bash的系統PATH環境變量/usr/bin,當我鍵入python,或者當virtualenvwrapper.sh腳本在第50行中提到which python時,我們將不再遇到上述的virtualenvwrapper衝突,並且所有事情都按預期工作。

這樣做的缺點是它可能會混淆arch linux專爲其設計的「python 3」(被認爲是默認的python命令)約定。所以必須注意,我不使用python 3相關的庫或與我的目標框中的python 3相關的軟件包安裝。

+0

這是一個很好的答案,對我來說它比virtualenv更好。我只需要它,因此我只是在需要時創建鏈接,然後取消鏈接/ usr/local/bin/python – Ben 2014-10-10 05:48:55

3

Virtualenvwrapper的變量VIRTUALENVWRAPPER_PYTHONVIRTUALENVWRAPPER_VIRTUALENV指向您的python和virtualenv可執行文件。所以,在你.bash_profile你可以寫這樣的:

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2 
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/bin/virtualenv2 
source /usr/bin/virtualenvwrapper.sh 
1

我發現沒有必要編輯/usr/bin/virtualenvwrapper.sh腳本或創建一個新的符號鏈接。我剛剛錯過了python2的virtualenvwrapper模塊。我安裝它如下:

pip2 install virtualenvwrapper 

並保持出口,所以魔術完成。