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

2 投票
2 回答
5039 浏览
提问于 2025-04-16 00:47

在交互式的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)。

撰写回答