簡體   English   中英

搜索路徑和Python虛擬環境

[英]Search path and Python virtual environment

我正在Python 3的虛擬環境中工作,我需要使用3方模塊“ mglearn”,並將其復制到虛擬環境的lib /中:

/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搜索的模塊?

編輯:

[abigail@localhost bin]$ ll activate
activate       activate.csh   activate.fish  
[abigail@localhost bin]$ ./activate
bash: ./activate: Permission denied
[abigail@localhost bin]$ sudo ./activate
sudo: ./activate: command not found

奇怪! 這是為什么?

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

由於看起來您已經設置了虛擬環境,並且看起來您正在使用某種形式的Unix / Linux:

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

然后,您應該看到終端看起來像:

(my_env) /home/abigail/environments

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

接下來,您應該安裝所需的模塊。 我假設該模塊可通過pip安裝獲得。

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

這應該使您一切就緒。 現在,當您檢查系統路徑時,應該會在其前面看到虛擬環境python內容。 並且您的導入錯誤應該消失。

如果遇到問題,您可能需要手動刪除掉到目錄中的mglearn副本。

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,第二個表示已安裝到特定virtualenv中的ipython。

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

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

這將使您可以將virtualenv與全局安裝的IPython一起使用。 但是,執行此操作的典型方法是在您的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運行source activate相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM