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

时间:2016-10-02 18:39:38

标签: python ipython python-import

所以,我有两个python文件:

第1" m12345.py"

def my():
    return 'hello world'

第二个" 1234.py":

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

在ipython上我尝试执行这样的cmds:

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

第二个命令的错误是:

ImportError: No module named 'm12345'

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

2 个答案:

答案 0 :(得分:2)

首先,如果您使用通用导入(from m12345 import *),那么您只需拨打my()功能而不是m12345.my(),否则您将获得

  

NameError:name' m12345'未定义

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

if "__name__" = "__main__":
    pass

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

编辑:m12345.py是否位于python文件夹中(它安装在硬盘中)?如果没有,那么您应该使用以下命令添加它在sys.path中的目录:

import sys
sys.path.append(directory)

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

答案 1 :(得分:1)

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

sys.modules['m12345'] = m12345

如果您希望模块位于系统路径中,可以添加

import m12345

在此之后你可以做到

from m12345 import *

var a = ['first', 'second', '<error>', 'Can not parse the third element', '</error>', 'fourth', 'fifth'];

var b = [];
var startJoinIndex = 2;
var endJoinIndex = 4;
var joinedValue = "";
a.forEach(function(item, index){
    if (index >= startJoinIndex && index <= endJoinIndex){
    joinedValue += item;
    if (index === endJoinIndex){
      b.push(joinedValue);
    }
  } else {
    b.push(item);
  }
});

console.log(b);