从virtualenv调用IPython

Mo *_*der 76 python virtualenv ipython

我知道IPython不支持virtualenv,并且最合乎逻辑的解决方案是在每个virtualenv中单独使用ipython

pip install ipython
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我注意到的一件事是,如果在virtualenv $> ipython下安装IPython之前使用virtualenv调用系统范围的IPython副本,后续$> ipython命令将继续调出系统范围的ipython副本.

另一方面,如果在安装它之前调用ipython,则会在virtualenv 下调$> ipython出新安装的副本.

对此有何解释?

这也让我想知道这种行为是否意味着我应该期待一些麻烦呢?

Sid*_*aRT 97

alias ipy="python -c 'import IPython; IPython.terminal.ipapp.launch_new_instance()'"

这是一种始终确保ipython实例始终属于virtualenv的python版本的好方法.

这仅适用于ipython> 2.0.

资源


rgt*_*gtk 10

您可以通过将以下文件添加到以下内容来强制IPython使用虚拟环境(如果可用)~/.ipython/profile_default/startups:

import os
import sys

if 'VIRTUAL_ENV' in os.environ:
    py_version = sys.version_info[:2] # formatted as X.Y 
    py_infix = os.path.join('lib', ('python%d.%d' % py_version))
    virtual_site = os.path.join(os.environ.get('VIRTUAL_ENV'), py_infix, 'site-packages')
    dist_site = os.path.join('/usr', py_infix, 'dist-packages')

    # OPTIONAL: exclude debian-based system distributions sites
    sys.path = filter(lambda p: not p.startswith(dist_site), sys.path)

    # add virtualenv site
    sys.path.insert(0, virtual_site)
Run Code Online (Sandbox Code Playgroud)

我建议命名它,00-virtualenv.py以便尽早进行更改.

注意:确保在新的虚拟环境中安装了ipython以使其正常工作.


小智 9

@SiddharthaRT给出的答案很好!按照这种方法,对我来说更简单:

python -m IPython
Run Code Online (Sandbox Code Playgroud)

这将通过python bin使用模块IPython,确保它引用了虚拟环境中的bin。


JDi*_*teo 6

正如其他人所提到的,ipython 的最新版本是 virtualenv 感知的,因此您可以使用您的 virtualenv bin activate脚本使用您的 virtualenv 运行 ipython,例如

$ source venv/bin/activate
(venv) $ ipython
WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
Run Code Online (Sandbox Code Playgroud)

  • 这么多反对票。如果这对您不起作用,请评论错误消息并输出`ipython --version; 猫 /etc/issue` (2认同)
  • 这将适用于 IPython 的控制台,但不适用于其他东西,例如 IPython 内核。 (2认同)

小智 6

  1. 使用source ~/.virtualenvs/my_venv/bin/activate或通过在my_venv 上运行work来激活您的虚拟环境(取决于您如何安装 my_venv 虚拟环境)

  2. 安装 ipython

pip 安装 ipython

  1. 现在从 my_venv 运行 ipython。

如果它仍然加载系统的 ipython,则运行

哈希 -r

  • 搜索了半个小时后,`hash -r`命令帮我完成了,谢谢! (2认同)