【问题标题】:importlib.import_module adding * to globals? [duplicate]importlib.import_module 将 * 添加到全局变量? [复制]
【发布时间】:2014-01-25 07:04:52
【问题描述】:

尝试根据一些动态环境变量动态添加设置属性到globals()

import os
from importlib import import_module


# To support environment variables as the means of specifying
# the target environment as an alternative to using the --settings flag
# where MY_ENV is 'local', 'development', 'staging', 'production'
if os.environ.get('MY_ENV'):
    env = os.environ.get('MY_ENV')
    import_module('my.settings.%s' % env, '*')

据了解import_module需要赋值给一个变量:

foo = import_module('path.to.package', 'bar')

还有:

globals()[foo] = foo

可以将其添加到global 范围内。

但是,使用通配符* 可以做什么?

globals()[*] = import_module('path.to.package', '*')

显然,上面的内容会导致语法错误。

【问题讨论】:

  • 看起来确实很相似。
  • 我不认为import_module 的第二个参数意味着你认为的意思。它的包相对导入应该是相对的;你的例子都不是相对导入。
  • 我明白了。我想我更多的是尝试使用字符串插值来动态改变导入路径。
  • 这个问题在这里得到解答:[Python:如何动态导入模块中的所有方法和属性][1] [1]:stackoverflow.com/questions/21221358/…
  • 嗯,正在尝试回答这个问题或标记为重复...

标签: python


【解决方案1】:

要做你想做的事,你需要使用“__import__()”而不是import_module()

我认为这个答案可以帮助你

How can I import a package using __import__() when the package name is only known at runtime?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多