2016-11-29 79 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