我试图调用在'时间x.py'从中调用'caller.py,然后应该通过“%run”从(PyCharm的)IPython控制台调用它caller.py".
这当前会导致“NameError:name‘pickle’is not defined”。
# timex.py
from IPython import get_ipython
def time_expression(exp: str):
print(f"time expression: {exp}", flush=True)
return get_ipython().magic(f"timeit {exp}")
# Then run from IPython-console:
>>>%run caller.py
time expression: pickle.dumps(packet, protocol=-1)
NameError: name 'pickle' is not defined
显然ipython timeit魔法的名称空间不包含 caller.py-全球性的。将globals()作为time_表达式的参数传递和从within time_表达式更新全局参数没有帮助,而将get_ipython()作为参数传递也没有起到作用。
有没有办法让它发挥作用?
如果我在caller.py
中定义时间表达式并用“ipython”从终端调用它,它就可以工作了caller.py“,但我更愿意把它放在库中,然后直接导入需要的地方。
(Python 3.6.3、IPython 6.2.1)
好吧,看来我运气不错。 我在这里发现了一个提示link,即shell有一个“user”参数。 然后用调用者的局部变量更新此用户词典是使其在从中导入时工作的解决方案caller.py通过运行%运行caller.py从IPython控制台。在
有点老土,我现在觉得脏兮兮的;) 也许还有更优雅的方式?在
相关问题 更多 >
编程相关推荐