在交互式Python中如何明确导入模块
在交互式的Python环境中,我想导入一个模块,这个模块的路径是:
C:\Modules\Module1\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 个回答
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
方法往列表里添加东西时,它会把这个东西放到最后,这样之前的路径可能会优先被使用;所以把目录放到最前面是更好的做法。
4
编辑: 这里有个我之前忘记提到的内容:这样导入位于任意文件夹的Python脚本是正确的吗? 我会把我其余的回答留在这里供参考。
确实可以做到,但你基本上需要自己写一个导入器,这个导入器会手动创建一个新的模块对象,并使用 execfile
来在这个对象的“命名空间”中运行模块的代码。如果你想这样做,可以看看 mod_python 导入器 的例子。
不过,有个更简单的办法,你可以把你想导入的文件所在的文件夹添加到 sys.path 的 开头,而不是结尾,像这样:
>>> import sys
>>> sys.path.insert(0, r'C:\Modules\Module1')
>>> import module
你不需要创建 __init__.py
文件,除非你是从一个包里面导入(也就是说,如果你要做 import package.module
,那你就需要 __init__.py
)。