在交互式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?
答案 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
到列表会将项目放在最后位置,因此路径中的其他先前条目很可能优先;因此,将目录放在第一个位置是一个更健全的方法。