ipython如何修改imp模块?

ipython如何修改imp模块?,python,python-2.7,ipython,python-import,Python,Python 2.7,Ipython,Python Import,在终端中执行这些命令后: mkdir /tmp/pymodule touch /tmp/pymodule/__init__.py 使用Python 2.7.12运行时,以下脚本为我提供了一个ImportError: from __future__ import print_function import imp print(imp.find_module('/tmp/pymodule')) 这是合理的,因为/tmp/pymodule不在我的Python路径上。但是,如果我使用%run在ipy

在终端中执行这些命令后:

mkdir /tmp/pymodule
touch /tmp/pymodule/__init__.py
使用Python 2.7.12运行时,以下脚本为我提供了一个
ImportError

from __future__ import print_function
import imp
print(imp.find_module('/tmp/pymodule'))
这是合理的,因为
/tmp/pymodule
不在我的Python路径上。但是,如果我使用
%run
ipython
(版本5.1.0)中运行脚本,我会得到
(无,/tmp/pymodule',('',,5))
。有趣的是,如果我用Python 3.5.2运行相同的脚本,我也会得到
(None,'/tmp/pymodule',('',,5))

为什么在Python2上的ipython中会发生这种情况?我的猜测是,
ipython
正在覆盖Python 2/Python 3兼容性的内置
imp
模块


我发现这种行为是因为我使用了
pkgutil.find_loader()
来测试字符串是Python路径上的模块还是目录路径
pkgutil.find_loader()
调用
imp.find_模块()。我的测试在普通脚本中工作,但不适用于包含
ipython
中的
init\uu.py
文件的目录路径。在Python3中,
pkgutil.find_loader()
处理这些路径的方式与python2相同,尽管
imp.find_module()
的行为不同(可能是因为它不再使用
imp

我无法重现这个问题-python2和ipython的行为相同(2)使用
导入程序
。python3和ipython(3)的行为相同,没有错误。那么,您的ipython会话使用哪个版本的python呢?ipython(5.1.0版)使用的是python 2.7.12。实际上,我使用的是Anaconda发行版的4.2.0版。除非我忽略了我的环境中的一些东西,否则它应该是Anaconda的普通版本(没有额外的软件包或配置)。我只是在另一台运行Arch Linux的机器上试用了
python
python2
ipython
,和
ipython2
来自官方回购协议的包,我看到了相同的行为。我无法重现问题-使用
ImportError的python2和ipython(2)的相同行为。python3和ipython(3)的行为相同,没有错误。那么,您的ipython会话使用哪个版本的python呢?ipython(5.1.0版)使用的是python 2.7.12。实际上,我使用的是Anaconda发行版的4.2.0版。除非我忽略了我的环境中的一些东西,否则它应该是Anaconda的普通版本(没有额外的包或配置)。我刚刚在另一台运行Arch Linux的机器上试用了官方repos中的
python
python2
ipython
ipython2
包,我看到了同样的行为。