Python 相对 __import__

标签 python import

假设我有一个包含以下文件的模块包。一个空文件 C:\codes\package\__init__.py 和一些重要文件:

一个位于C:\codes\package\first.py

def f():
    print 'a'

另一个位于 C:\codes\package\second.py

def f():
    print 'b'

还有第三个文件:C:\codes\package\general.py,代码如下

def myPrint(module_name):
    module = __import__(module_name)
    module.f()

if __name__ == '__main__':
    myPrint('first')
    myPrint('second')

当我运行后一个文件时,一切正常。但是,如果我尝试执行文件 C:\codes\test.py 包含

if __name__ == '__main__':
    from package import general
    general.myPrint('first')
    general.myPrint('second')

我收到导入错误 ImportError: No module named first。如何解决这个问题?

最佳答案

首先,我怀疑你忘了提到你有一个(可能是空的)文件 package\__init__.py 使 package 成为一个包。否则,from package import general 将无法工作。

就您在包裹中而言,第二种情况与第一种情况不同。在包内部,您不会执行 import first,而是执行 import .first。相当于后者的描述here您可以在其中添加 level=1 作为参数,或者(但我不确定)将 .first 放入字符串并设置 level-1(如果它不是默认值,文档中并不清楚)。

另外,你至少要提供globals(),所以正确的行是

module = __import__(module_name, globals(), level=1)

我找到了这个解决方案 here .

关于Python 相对 __import__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30046178/

相关文章:

python - 分词建议

python - 在 Django 模型中使用请求

Matlab 使用 GUI 按钮调用 'Import Data'

java - 将 wikipedia-dump 导入到 SQL 不完整

python - 如何强制 genfromtxt 读取 csv 作为记录数组?

python - 是否有用于 Unicode 空白的 Python 常量?

python - 使用 Dash/Plotly 绘制分类散点图

java - 从两个冲突的 jar 导入类时,使用哪个?

java - 想法Intellij : Can't import the libraries: package does not exist

logging - 如何在 Dart 中导入日志库?