2017-01-07 23 views
5

我有一個問題,其中python在virtualenv中沒有找到由pip安裝的模塊。

我縮小了它的範圍,發現當我在啓動virtualenv時調用python時,它仍然伸出到/usr/bin/python而不是/home/liam/dev/.virtualenvs/noots/bin/python

當我在virtualenv中使用which python我得到:

/home/liam/dev/.virtualenvs/noots/bin/python

當我看着我的$PATH變量在virtualenv中我得到:

bash: /home/liam/dev/.virtualenvs/noots/bin:/home/liam/bin:/home/liam/.local/bin:/home/liam/bin:/home/liam/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory

,然而當我真正運行python它去/usr/bin/python

爲了讓我更加困惑,如果我運行python3.5它從正確的目錄抓取python3.5。 /home/liam/dev/.virtualenvs/noots/bin/python3.5

無論如何我還沒有碰過/home/liam/dev/.virtualenvs/noots/bin/pythonpython3.5仍然鏈接到該目錄中的python3。遍歷到/home/liam/dev/.virtualenvs/noots/bin/並運行./python./python3./python3.5都能正常工作。

我使用virtualenvwrapper如果有差別,但是這個問題似乎最近發生的,長期安裝後virtualenvvirtualenvwrapper

+4

在命令行上運行'alias'來查看'python'是否被別名。 – tdelaney

+0

啊謝謝!這是問題所在。 – liamhawkins

+1

請張貼解決方案,因爲這是一個有趣的問題。 – oliversm

回答

1

如果你沒有得到which說你應該得到的程序,那麼你需要比平臺執行者看起來更高。殼通常有一種方法來命令別名,在大多數unixy shell中,您只需輸入alias即可查看哪些命令已被重新映射。然後它只是去你的shell的配置文件和刪除別名的問題。

有時人們別名python試圖理清他們應該使用哪個python。但通常還有其他更好的方法。例如,在我的Linux機器上,python3位於路徑中,但是它是我正在使用的真正Python的符號鏈接。

[email protected] ~ $ which python3 
/usr/bin/python3 
[email protected] ~ $ ls -l /usr/bin/python3 
lrwxrwxrwx 1 root root 9 Feb 17 2016 /usr/bin/python3 -> python3.4 
[email protected] ~ $ 

這很好,因爲運行python的非shell程序和我自己做的是一樣的,虛擬環境自然地工作。

3

由於tdelaney的意見建議,我跑alias,發現我以前曾化名python/usr/bin/python3.5在我的.bashrc

我從我的.bashrc中刪除了別名,運行了unalias pythonsource ~/.bashrc,問題解決了。

相關問題