2016-11-29 77 views
0

我Python中3.I一個虛擬的環境中工作需要使用3方模塊「mglearn」,我把它複製到我的虛擬環境的lib /:搜索路徑和Python的虛擬環境

/home/abigail/environments/my_env/lib/python3.5/site-packages/mglearn 

然而,在ipython命令行中找不到模塊名稱:

In [1]: import mglearn 
--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-1-e19748f92cd9> in <module>() 
----> 1 import mglearn 

ImportError: No module named 'mglearn' 

它應該找到它。對?

然後我檢查了我的sys.path:

In [4]: print(sys.path) 
['', '/usr/bin', '/usr/lib64/python35.zip', '/usr/lib64/python3.5', '/usr/lib64/python3.5/plat-linux', '/usr/lib64/python3.5/lib-dynload', '/usr/lib64/python3.5/site-packages', '/usr/lib/python3.5/site-packages', '/usr/lib/python3.5/site-packages/IPython/extensions', '/home/abigail/.ipython'] 

爲什麼「的sys.path」只包含目錄,從根/,而不是我的虛擬環境開始?我怎樣才能讓這個模塊被Python搜索?

編輯:

[[email protected] bin]$ ll activate 
activate  activate.csh activate.fish 
[[email protected] bin]$ ./activate 
bash: ./activate: Permission denied 
[[email protected] bin]$ sudo ./activate 
sudo: ./activate: command not found 

奇怪!這是爲什麼?

+0

你如何進入virtualenv? – Blender

+0

你是什麼意思?我剛進入虛擬環境目錄 – user697911

+0

您已經創建了一個虛擬環境,但您如何真正使用它?你運行'。 my_env/bin/activate',然後運行'python'?還有別的嗎?你似乎沒有真正從你的最後一段代碼中使用它。 – Blender

回答

1

一般來說,對於虛擬環境,您將希望在虛擬環境激活時間進行安裝以獲取要導入的模塊,以便在路徑變量中正確預先掛接。考慮嘗試這樣的:

因爲它看起來像你已經有了一個虛擬的環境設置,它看起來像你正在使用某種形式的Unix/Linux的:

/home/abigail/environments/ $ source my_env/bin/activate 

之後,應看到你的終端看東西如:

(my_env) /home/abigail/environments 

這意味着您有一個活動的虛擬環境。

接下來你應該安裝你想要的模塊。我假設該模塊可通過pip安裝。

(my_env) /home/abigail/environments $ pip install mglearn 

這應該讓你所有的設置。當你檢查你的sys路徑時,你現在應該看到它的前面你的虛擬環境python的東西。而您的導入錯誤應該消失。

如果事情卡住了,您可能需要刪除掉手動放入目錄的mglearn副本。

+0

我是否需要每次激活它? – user697911

+0

您希望在任何時候想要使用此模塊以及您在虛擬環境中設置的任何其他設備時激活它。是。 –

+0

另外,完成後,請務必輸入「停用」以關閉虛擬環境。允許系統進行拆卸。 –

0

VirtualEnv創建一個Python安裝的克隆,並在sys.path中創建一個指向給定virtualenv的site-packages目錄的額外路徑。

當您啓動IPython時,它可能安裝在您的主Python安裝中,並且不知道您創建的任何其他虛擬環境。

如果您將IPython安裝到虛擬環境中,它將知道該virtualenv的站點包位置。嘗試運行:

which ipython

然後看看你IPython的腳本,你會看到它要麼開始:

#!/usr/bin/python

或:

#!/home/abigail/environments/my_env/bin/python3

第一表示全局安裝的ipython,第二個表示有蜜蜂的ipython安裝到特定的virtualenv。

僅供參考,您可以通過導出PYTHONPATH環境變量添加路徑Python解釋:

```export PYTHONPATH=/home/abigail/environments/my_env/lib/python3.5/site-packages``` 

這將讓你使用一個全球的裝機量IPython的與你的virtualenv。但是,執行此操作的典型方法是在virtualenv中安裝第二個IPython副本並使用該副本。

```/home/abigail/environments/my_env/bin/ipython``` 

的virtualenv中的activate shell命令只做兩兩件事:

  1. 的virtualenv中Python解釋器添加到您的PATH。所以當你輸入python3時,你運行的是/home/abigail/environments/my_env/bin/python3而不是/usr/bin/python3。這是在/home/abigail/environments/my_env/bin/python3這個二進制文件,它將自動在sys.path中包含/home/abigail/environments/my_env/lib/python3.5/site-packages位置。

  2. 更改PS1環境變量,以便你的終端有一個提示,提醒你這VIRTUALENV你工作。

它是由你來使用activate shell腳本或沒有(因爲它只是非常簡單的幫手腳本,你可以用任何有意義的方式調整環境)。如果你只使用一個virtualenv中,你可以添加出口到你的〜/ .bashrc文件代替,例如:

```export PATH=/home/abigail/environments/my_env/bin/:$PATH``` 

會自動進行python3運行的virtualenv的Python一樣你的virtualenv中運行source activate