我正在 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
奇怪!这是为什么?
最佳答案
VirtualEnv 创建 Python 安装的克隆,并将附加路径烘焙到 sys.path 中,该路径指向给定 virtualenv 的 site-packages 目录。
当您启动 IPython 时,它可能已安装在您的主 Python 安装中,并且不知道您创建的任何其他虚拟环境。
如果您将 IPython 安装到虚拟环境中,它将知道该 virtualenv 的站点包位置。尝试并运行:
哪个 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 命令只做两件事:
将 virtualenv Python 解释器添加到您的 PATH 中。因此,当您输入
python3
时,您将运行/home/abigail/environments/my_env/bin/python3
而不是/usr/bin/python3
。正是/home/abigail/environments/my_env/bin/python3
中的二进制文件将自动包含/home/abigail/environments/my_env/lib/python3.5/site-packages
sys.path 上的位置。更改您的 PS1 环境变量,以便您的终端出现提示,提醒您正在使用哪个 virtualenv。
是否使用 activate
shell 脚本取决于您(因为它只是非常简单的帮助脚本,您可以以任何对您有意义的方式调整环境)。如果您只使用一个 virtualenv,则可以将导出添加到 ~/.bashrc 文件中,例如:
```export PATH=/home/abigail/environments/my_env/bin/:$PATH```
会自动让 python3
运行您的 virtualenv Python,就像在您的 virtualenv 中运行 source activate
一样。
关于python - 搜索路径和Python虚拟环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876767/