在使用IPython在Python中开发一个大型项目(分成几个文件和文件夹)时,我遇到了缓存导入模块的麻烦.
问题是指令import module只读取模块一次,即使该模块已经改变!因此,每次我更改包中的内容时,都必须退出并重新启动IPython.痛苦.
有没有办法正确强制重装一些模块?或者,更好的是,以某种方式阻止Python缓存它们?
我尝试了几种方法,但都没有效果.特别是我遇到了非常非常奇怪的错误,就像一些模块或变量神秘地变得相等None......
我找到的唯一明智的资源是从pyunit 重新加载Python模块,但我没有检查它.我想要那样的东西.
一个很好的替代方案是让IPython重启,或以某种方式重启Python解释器.
那么,如果你用Python开发,你找到了什么解决方案来解决这个问题?
编辑
为了清楚起见:很明显,我理解一些旧的变量取决于模块的先前状态可能会存在.那个我能接受.为什么在Python中如此难以强制重新加载模块而不会发生各种奇怪的错误?
更具体地说,如果我将整个模块放在一个文件中,module.py那么以下工作正常:
import sys
try:
del sys.modules['module']
except AttributeError:
pass
import module
obj = module.my_class()
Run Code Online (Sandbox Code Playgroud)
这段代码很漂亮,我可以在不退出IPython的情况下开发数月.
但是,每当我的模块由多个子模块组成时,地狱就会松动:
import os
for mod in ['module.submod1', 'module.submod2']:
try:
del sys.module[mod]
except AttributeError:
pass
# sometimes this works, sometimes not. WHY?
Run Code Online (Sandbox Code Playgroud)
为什么我的模块在一个大文件或几个子模块中是如此不同?为什么这种方法不起作用?
当我的程序运行引发异常的行时,有没有办法启动IPython shell或提示?
我最感兴趣的是引发异常的范围(和子范围)中的上下文,变量.像Visual Studio的调试,当抛出异常但没有被任何人捕获时,Visual Studio将停止并给我调用堆栈和每个级别的变量.
你认为有一种方法可以使用IPython获得类似的东西吗?
编辑:-pdb启动IPython 的选项似乎没有做我想要的(或者我可能不知道如何正确使用它,这是完全可能的).我运行以下脚本:
def func():
z = 2
g = 'b'
raise NameError("This error will not be caught, but IPython still"
"won't summon pdb, and I won't be able to consult"
"the z or g variables.")
x = 1
y = 'a'
func()
Run Code Online (Sandbox Code Playgroud)
使用命令:
ipython -pdb exceptionTest.py
Run Code Online (Sandbox Code Playgroud)
这会在引发错误时停止执行,但会给我一个IPython提示符,其中我可以访问脚本的全局变量,但不能访问函数func的局部变量.pdb只在我在ipython中直接输入导致错误的命令时调用,即raise NameError("This, sent from the IPython prompt, will trigger pdb.").
我不一定需要使用pdb,我只想访问里面的变量func.
编辑2:已经有一段时间了,IPython的-pdb选项现在正如我想要的那样工作.这意味着当我提出异常时,我可以返回范围func并读取其变量z …
我的笔记本中的一个单元格执行了很长时间,而机器中的其他CPU则处于空闲状态.是否可以并行运行其他单元格?
我想以编程方式在IPython Notebook早期退出单元格.exit(0)然而,杀死了内核.
什么是正确的方法来做到这一点?我不想拆分单元格或手动停止执行.
我使用Windows 7,Python 2.7.9加上最新版本的IPython 3.1.
我%python在IPython笔记本内部运行并运行单元格,而不是返回Python版本,它没有运行并跳转到新行并打印In [*]而不是行号.现在ipython中没有运行任何行我尝试运行单元格值时会忽略所有内容.
谁知道发生了什么?
我试图用非默认浏览器启动IPython(在我的情况下是Firefox),并且我认为我可以复制复制该博客中给出的脚本
我在Windows 7上
我把以下代码放在一个文件中说"module.py"
import subprocess
subprocess.call("ipython notebook --no-browser", shell=True)
subprocess.call([r'C:\Program Files (x86)\Mozilla Firefox\Firefox.exe', '-new-tab', 'http://127.0.0.1:8888/'])
Run Code Online (Sandbox Code Playgroud)
但是,当我从命令行运行它时
python C:\Users\mugabal\Desktop\module1.py
Run Code Online (Sandbox Code Playgroud)
它执行第一行而不是第二行(两行都单独工作)
我的问题(用更通用的术语)我如何启动一个进程并告诉它不要高举控制台窗口?
如果我已经监督了一个明显的解释,我提前道歉,但我在子流程文档和这个平台上都看了
-----更新-----
我应该补充一点,我试图用选定的浏览器启动IPython,但无法弄清楚如何让它工作
>ipython notebook --browser='C:\Program Files (x86)\Mozilla Firefox\Firefox.exe'
...
[NotebookApp] The IPython Notebook is running at: http://127.0.0.1:8888/
...
**[NotebookApp] No web browser found: could not locate runnable browser.**
Run Code Online (Sandbox Code Playgroud)
确切地说,Windows命令提示符窗口中的以下命令按预期工作:
start firefox
Run Code Online (Sandbox Code Playgroud)
但
ipython notebook --browser=firefox
Run Code Online (Sandbox Code Playgroud)
不起作用(与上面相同的错误).
我正在使用IPython,并希望从另一个笔记本中运行功能(不需要在不同的笔记本之间剪切和粘贴).这可能并且相当容易吗?
我正在使用ipython笔记本(http://ipython.org/notebook.html)进行演示,看起来打印功能似乎不起作用:

为清楚起见,上面的图片中的命令被重写.
In [1]: 'hello world'
Out [1]: 'hello world'
In [2]: print 'hello world'
Run Code Online (Sandbox Code Playgroud)
简而言之,没有打印输出[2].
有谁知道这是否是一个已知的错误?有谁知道如何解决它?
我最近停止使用,macports因此我用于各种IPython内核的kernel.json文件已经过时了.我已重命名~/.ipython并删除了,~/.jupyter但启动的内核无法启动file not found错误.
更有说服力的是,当我运行时,jupyter-kernelspec list它仍然列出了我设置的所有旧内核.从哪里获取此信息以及我需要做什么来刷新/删除其缓存?
当有人试图学习Python的细节(强调科学计算 - 即:熊猫,numpy,scikit-learn)时,大多数大师似乎都在推荐和使用iPython笔记本.作为初学者/中级编码器,我最大的难点在于我需要从IDE中获取代码完成/智能感知功能来学习函数参数.我还没有简单地知道当前开发中可用的参数.
在iPython中,我注意到我可以按下Tab以显示选项的下拉菜单(见下面的pd.)但我不想每次都打.这对我的需求来说不是用户友好的.相反,当我按下dot时,我希望它只显示可用的类和方法.
其次,我注意到如果我说的话pd.read_csv(<TAB>,我会得到比实际参数更多的选项read_csv.
问题:按下点/句点后,iPython可以立即自动显示准确的代码完成选项吗?另外,有没有办法将其配置为仅在函数内显示可用的函数参数?
为了使这个问题超级具体,我不是要求使用任何其他IDE; 我只是非常具体地询问iPython,并想知道是否有办法设置某种配置,以便在按下"点"(没有时间延迟)时立即获得准确的"点"显示选项.
下面的例子显示Desktop哪个显然不是参数pd.read_csv().