【问题标题】:In interactive Python, how to unambiguously import a module在交互式 Python 中,如何明确导入模块
【发布时间】:2010-07-03 23:44:51
【问题描述】:

在交互式 python 中,我想导入一个模块,比如说,

C:\Modules\Module1\module.py

我能做的是创建一个空

C:\Modules\Module1\__init__.py

然后做:

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

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

还有其他不涉及附加到 sys.path 的导入方式吗?

【问题讨论】:

标签: python import path


【解决方案1】:

编辑:这是我忘记的事情: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)。

【讨论】:

    【解决方案2】:

    插入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 将项目放在 last 位置,因此路径中的其他先前条目很可能优先;因此,将目录放在第一个位置是一种更合理的方法。

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 2011-05-31
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2015-09-23
      • 2010-11-18
      相关资源
      最近更新 更多