2010-09-08 54 views
2

我使用--no-site-packages選項創建了virtualenv環境。激活virtualenv後,我注意到在「python」提示符處導入psycopg2會導入已過時的系統庫,但是在「python2.6」提示符處導入它會將我安裝的庫的較新版本導入到virtualenv 。Virtualenv在不應該使用系統軟件包時

這是爲什麼?我如何才能在啓用virtualenv時使用virtualenv軟件包?

我在OS X上,如果它很重要。

編輯迴應下面傑夫的評論:

同時有「巨蟒」,在我的virtualenv/bin目錄「python2.6的」可執行文件。 「python2.6」是一個「python」的符號鏈接,「python」是一個二進制文件。

(ice_development)[[email protected]:~] $ ls -l Virtualenv/ice_development/bin/ 
total 264 
-rw-r--r-- 1 jacob staff 2086 Sep 8 18:13 activate 

..... 

-rwxr-xr-x 1 jacob staff 50720 Sep 8 18:13 python 
lrwxr-xr-x 1 jacob staff  6 Sep 8 18:13 python2.6 -> python 

隨着ENV激活,「哪個python」和「哪個python2.6」都指向ENV目錄。

(ice_development)[[email protected]:~] $ which python 
/Users/jacob/Virtualenv/ice_development/bin/python 
(ice_development)[[email protected]:~] $ which python2.6 
/Users/jacob/Virtualenv/ice_development/bin/python2.6 
(ice_development)[[email protected]:~] $ 

此外,在命令行使用可執行文件後,提示符是相同的。

(ice_development)[[email protected]:~] $ python2.6 
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import psycopg2 
>>> psycopg2.__version__ 
'2.2.2 (dt dec ext pq3)' 
>>> quit() 

(ice_development)[[email protected]:~] $ python 
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import psycopg2 
>>> psycopg2.__version__ 
'2.0.13 (dt dec ext pq3)' 
>>> quit() 

的〜/ ENV/lib中/ python2.6的/ site-packages目錄包含psycopg2的新版本(2.2.2):

(ice_development)[[email protected]:~] $ ls Virtualenv/ice_development/lib/python2.6/site- packages/ 
Twisted-10.1.0-py2.6-macosx-10.6-universal.egg  setuptools-0.6c11-py2.6.egg 
easy-install.pth          setuptools.pth 
pip-0.7.2-py2.6.egg         txpostgres-0.3.0-py2.6.egg 
psycopg2            zope.interface-3.6.1-py2.6-macosx- 10.6-universal.egg 
psycopg2-2.2.2-py2.6.egg-info 

然而,在不同的提示進口進口psycopg2兩個不同的版本。

+0

提示符是相同的,因爲它們都使用相同的版本。我的2.6 virtualenv和non-virtual共享相同的時間戳。 – xnine 2010-09-10 00:11:21

回答

1

我一直在試圖複製你的問題,但沒有運氣。

激活virtualenv中給我留下了這樣的提示:

[email protected]:~$ source ~/ENV/bin/activate 
(ENV)[email protected]:~$ 

晴這是什麼東西做的是增加了〜/ ENV/bin添加到搜索路徑的前面,所以,當我鍵入「蟒蛇」版本我已經安裝在那個箱子裏首先出現。就我而言,我在全球安裝了2.6個虛擬機,並安裝了2.7個虛擬機。

(ENV)[email protected]:~$ python 
Python 2.7 (r27:82500, Sep 8 2010, 20:09:26) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 

我感到奇怪的情況是,你說你有你的更新庫在虛擬環境中,但你只能用python2.6的訪問它們。除非你自己創建了它,否則〜/ ENV/bin甚至不應該有一個python2.6可執行文件。如果你已經激活了virtualenv,那麼輸入python會讓你進入virtualenv python shell,輸入python2.6會把你帶到全局的python shell。如果是這樣的話,你應該看到與你所說的相反的事情。

我會做的第一件事就是看看,當你運行python和python2.6的正在執行什麼:

(ENV)[email protected]:~$ which python 
/home/jeff/ENV/bin/python 
(ENV)[email protected]:~$ which python2.6 
/usr/bin/python2.6 

這看起來我怎麼會想到它。你的樣子是什麼?如果你的看起來像這樣,也許你需要進入〜/ ENV/lib/python2.6/site-packages /並刪除那些給你帶來麻煩的文件,用更新後的文件替換它們。

編輯:別名優先於搜索路徑:

[email protected]:~$ echo $PATH 
/home/jeff/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 
[email protected]:~$ cat > /home/jeff/bin/hello.sh 
#!/bin/bash 
echo "hello world" 
[email protected]:~$ chmod +x ~/bin/hello.sh 
[email protected]:~$ hello.sh 
hello world 
[email protected]:~$ which hello.sh 
/home/jeff/bin/hello.sh 
[email protected]:~$ alias hello.sh=/usr/bin/python 
[email protected]:~$ which hello.sh 
/home/jeff/bin/hello.sh 
[email protected]:~$ hello.sh 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 
+0

同時檢查模塊搜索路徑sys.path,爲每個:'python -c'import sys; print(sys.path)''和'python2.6 -c ...' – 2010-09-09 04:34:25

+0

「python」可執行文件有更長的搜索路徑,包括我不想導入的/Library/Python/2.6/site-packages中的第三方系統軟件包。 – 2010-09-09 22:47:05

1

由於xnine的迴應,我計上心來檢查我的.bashrc文件。我注意到這些行:

export PATH=/usr/bin/python2.6:$PATH 
alias python="/usr/bin/python2.6" 
alias pdb='python -m pdb' 

其中一人做了詭計。

+1

這絕對是別名。它優先於搜索路徑。請參閱我的文章的編輯部分中的示例。 – xnine 2010-09-10 00:05:41

相關問題