在交互式Python中,如何明确地导入模块

时间:2010-07-03 23:44:52

标签: python import path

在交互式python中,我想导入一个位于,例如

的模块

C:\模块\模块1 \ module.py

我能做的就是创建一个空的

C:\Modules\Module1\__init__.py

然后执行:

>>> import sys
>>> sys.path.append(r'C:\Modules\Module1')
>>> import module

这样可行,但是我必须附加到sys.path,如果还有另一个名为module.py的文件也在sys.path中,那么如何明确地解析为我真正想要的那个导入?

是否有另一种导入方式,不涉及附加到sys.path?

2 个答案:

答案 0 :(得分:4)

编辑:这是我忘记的事情:Is this correct way to import python scripts residing in arbitrary folders?我将把剩下的答案留在这里作为参考。


有,但你基本上编写自己的导入器,手动创建一个新的模块对象,并使用execfile在该对象的“命名空间”中运行模块的代码。如果您想这样做,请查看mod_python importer以获取示例。

对于更简单的解决方案,您只需将要导入的文件的目录添加到sys.path开头,而不是结尾,如下所示:

>>> import sys
>>> sys.path.insert(0, r'C:\Modules\Module1')
>>> import module

您不需要创建__init__.py文件,除非您从包中导入(因此,如果您正在执行import package.module,那么您需要__init__.py )。

答案 1 :(得分:1)

sys.path中插入(在最初的位置)效果更好:

>>> import sys
>>> sys.path.insert(0, 'C:/Modules/Module1')
>>> import module
>>> del sys.path[0]  # if you don't want that directory in the path

append到列表会将项目放在最后位置,因此路径中的其他先前条目很可能优先;因此,将目录放在第一个位置是一个更健全的方法。