如何在 ipython 中将脚本作为模块导入?

how to import scripts as modules in ipyhon?

所以,我有两个 python 文件:

第一名"m12345.py"

def my():
    return 'hello world'

第二个“1234.py”:

from m12345 import *
a = m12345.my()
print(a)

在 ipython 我尝试执行这样的命令:

exec(open("f:\temp\m12345.py").read())
exec(open("f:\temp\1234.py").read())

第二个命令的错误是:

ImportError: No module named 'm12345'

请问如何将第一个文件添加为第二个文件的模块?

您必须通过调用 m12345 = imp.new_module('m12345') 创建一个新模块(例如 m12345),然后通过调用 exec(open('path/m12345.py').read(), m12345.__dict__) 在该模块中执行 python 脚本。请参阅以下示例:

import imp
pyfile = open('path/m12345.py').read()
m12345 = imp.new_module('m12345')
exec(pyfile, m12345.__dict__)

如果你想让模块在系统路径下,你可以添加

sys.modules['m12345'] = m12345

之后你可以做

import m12345

from m12345 import *

首先,如果您使用通用导入 (from m12345 import *),那么您只需调用 my() 函数而不是 m12345.my() 否则您将得到一个

NameError: name 'm12345' is not defined

其次,您应该在每个脚本中添加以下代码片段,您希望在其中能够直接 运行 或不直接(导入时)。

if "__name__" = "__main__":
    pass

PS。将此添加到第一个脚本 ("m12345.py")。 PS2。避免使用通用导入方法,因为它有能力弄乱脚本的命名空间。 (因此,它不被认为是最佳实践)。

编辑: m12345.py 是否位于 python 文件夹中(它安装在硬盘驱动器中的位置)?如果没有,那么你应该添加它位于 sys.path 中的目录:

import sys
sys.path.append(directory)

其中 directory 是您的 m12345.py 所在位置的字符串。请注意,如果您使用 Windows,则应使用 / 而不是 \。 然而,重新定位脚本会容易得多(如果可能的话)。