对 Python 安装、模块安装和解释器感到困惑
Confused about Python installations, module installation, and interpreter
所以昨天我不得不创建一个 virtualenv 以便能够安装 Python 由于 OS X El Capitan 的新 SIP 而无法安装的模块。我以为我做的一切都是对的,但今天我得出了不同的结论。我希望我能说清楚。
我的 python 自定义安装在 myname/learnp/imdb_module,这是我用 virtualenv 创建它的地方。编辑:我后来将其移至 myname/learnp/ayr2/imdb_module.
但是,当我尝试 运行 解释器时,它似乎总是默认为库中的 Python 或类似的东西。我发现这个是因为我设法安装在这个自定义 python 环境中的某个模块不会导入,当我检查我有哪些模块时,它与我预期的不一样。
此外,我想在 CUSTOM virtualenv 上安装的所有其他模块似乎都安装在主 python env 上,而且我一直没有在自定义 env 上安装这些模块。
对不起,我现在很困惑。
- 我知道如何创建虚拟环境
- 我知道如何激活它(它出现在终端行的右边)
- 我不知道如何将模块安装到我的虚拟环境
- 我不知道如何从虚拟环境中创建解释器 运行,所以我可以执行 python 只有使用自定义环境模块才能实现的操作
非常感谢任何建议!
更新:
已关注 进行故障排除,我认为发生了一些奇怪的事情,引用我对他的回答的评论:
HI, thanks for taking the time to answer. This is basically the way I understood this. However, let me attach a screenshot: http://i.imgur.com/DfpngJq.jpg . Am I right to assume something is wrong here? My prompt is changed with the virtualenv named "imdb_module", but when I type in which python
it doesn't list ayr2/imdb_module/bin
but rather a folder with the path usr/bin/python
, which if I understand correctly is the "default" environment.
And not if this helps in any way, but echo $PATH
when (imdv_module) appears to the right of the prompt, gives this (I redacted my name): /Users/REDACTEDNAME/learnp/imdb_module/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
在创建 virtualenv 时,您应该会看到它正在安装 setuptools 和 pip:
$ virtualenv testvenv
New python executable in testvenv/bin/python2.7
Also creating executable in testvenv/bin/python
Installing setuptools, pip...done.
确保 virtualenv 已激活后,您应该会看到提示更改:
$ . ./testvenv/bin/activate
(testvenv)$
现在您可以确认 python 和 pip 的路径,它们应该在 virtualenv 中:
(testvenv)$ which python
/private/tmp/testvenv/bin/python
(testvenv)$ which pip
/private/tmp/testvenv/bin/pip
如果您没有在 virtualenv 的目录下看到 python 和 pip 位置,那么 virtualenv 还没有被激活。
我还要确保,如果您直接执行 .py 文件(而不是使用“python foo.py
”),您的 shebang 行使用:
#!/usr/bin/env python
甚至是 virtualenv python
的完整路径,例如:
#!/tmp/testvenv/bin/python
相对于,说:
#!/usr/bin/python
第一个会在当前环境中搜索,由virtualenv激活设置。第二个明确指向 virtualenv 的“python”。
所以昨天我不得不创建一个 virtualenv 以便能够安装 Python 由于 OS X El Capitan 的新 SIP 而无法安装的模块。我以为我做的一切都是对的,但今天我得出了不同的结论。我希望我能说清楚。
我的 python 自定义安装在 myname/learnp/imdb_module,这是我用 virtualenv 创建它的地方。编辑:我后来将其移至 myname/learnp/ayr2/imdb_module.
但是,当我尝试 运行 解释器时,它似乎总是默认为库中的 Python 或类似的东西。我发现这个是因为我设法安装在这个自定义 python 环境中的某个模块不会导入,当我检查我有哪些模块时,它与我预期的不一样。
此外,我想在 CUSTOM virtualenv 上安装的所有其他模块似乎都安装在主 python env 上,而且我一直没有在自定义 env 上安装这些模块。
对不起,我现在很困惑。
- 我知道如何创建虚拟环境
- 我知道如何激活它(它出现在终端行的右边)
- 我不知道如何将模块安装到我的虚拟环境
- 我不知道如何从虚拟环境中创建解释器 运行,所以我可以执行 python 只有使用自定义环境模块才能实现的操作
非常感谢任何建议!
更新:
已关注
HI, thanks for taking the time to answer. This is basically the way I understood this. However, let me attach a screenshot: http://i.imgur.com/DfpngJq.jpg . Am I right to assume something is wrong here? My prompt is changed with the virtualenv named "imdb_module", but when I type in
which python
it doesn't listayr2/imdb_module/bin
but rather a folder with the pathusr/bin/python
, which if I understand correctly is the "default" environment.And not if this helps in any way, but
echo $PATH
when (imdv_module) appears to the right of the prompt, gives this (I redacted my name):/Users/REDACTEDNAME/learnp/imdb_module/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
在创建 virtualenv 时,您应该会看到它正在安装 setuptools 和 pip:
$ virtualenv testvenv
New python executable in testvenv/bin/python2.7
Also creating executable in testvenv/bin/python
Installing setuptools, pip...done.
确保 virtualenv 已激活后,您应该会看到提示更改:
$ . ./testvenv/bin/activate
(testvenv)$
现在您可以确认 python 和 pip 的路径,它们应该在 virtualenv 中:
(testvenv)$ which python
/private/tmp/testvenv/bin/python
(testvenv)$ which pip
/private/tmp/testvenv/bin/pip
如果您没有在 virtualenv 的目录下看到 python 和 pip 位置,那么 virtualenv 还没有被激活。
我还要确保,如果您直接执行 .py 文件(而不是使用“python foo.py
”),您的 shebang 行使用:
#!/usr/bin/env python
甚至是 virtualenv python
的完整路径,例如:
#!/tmp/testvenv/bin/python
相对于,说:
#!/usr/bin/python
第一个会在当前环境中搜索,由virtualenv激活设置。第二个明确指向 virtualenv 的“python”。