- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我写了一个小脚本。它旨在搜索 python 目录以查找所有可用模块(无论是否安装),然后它应该检查当前加载了哪些模块,然后它提供了一个选项来动态加载您选择的模块。后者使用 __import__()
因为我将一个字符串传递给它 - (这是我遇到问题的地方 - 但我很快就会回到它)......然后它给出了选项“浏览”模块的所有类、函数等(使用 dir([module name])
...)。
问题:
当动态加载模块时——它被嵌入到try/except
语句中——如果成功则报告“模块已加载”,如果失败则报告...duh。 ..”加载失败...”
如果您键入模块的名称,例如名为“uu”的模块,它会显示“已加载”。所以我知道它正在加载 - 但是,当我返回并调用检查所有已加载模块的函数时 - 它是空白的(使用 sys.modules
)
我认为 python 正在将模块加载到不是 sys.modules
的临时位置,因为当我退出脚本并检查 sys.modules
时不存在。
最佳答案
Nascent_Notes,不错的脚本!我尝试加载 uu
(命令 3)并打印加载模块列表(命令 2),它们似乎都工作正常。
但是,如果我尝试“浏览模块”(命令 4),我会收到以下错误:
HlpWiz>>> 4
What module do you want to look more into?: uu
*An error occurred - probably because the module isn't loaded or is misspelled*
尝试运行
#!/usr/bin/env python
import sys
__import__('uu')
print(sys.modules['uu'])
print(dir(uu))
您应该得到 NameError: name 'uu' is not defined
。
所以看起来虽然 __import__
成功导入了 uu
模块,它不会将 uu
添加到全局命名空间——模块 uu
不能由变量名 uu
访问。它可以通过 sys.modules
访问,但是:
因此,改变
var_mod = input("What module do you want to look more into?: ")
print "\n attempting to browse... please wait!"
time.sleep(2)
browse_mod(zlib = var_mod)
到
var_mod = raw_input("What module do you want to look more into?: ")
print "\n attempting to browse... please wait!"
time.sleep(2)
browse_mod(zlib = sys.modules[var_mod])
不仅使用 raw_input
比 input
更安全(用户将无法执行意外/恶意命令),而且 raw_input
在这里做你想做的事。
在次要注意事项上,您还可以更改
i = 1
for line in sample:
print i, line
i = i + 1
更加pythonic
for i,line in enumerate(sample):
print i+1, line
编辑:
sys.modules 是一个 dict(dictionary 的缩写)。 Dicts 就像电话簿——你给它一个名字(更好地称为“键”),它返回一个电话号码(或更一般地说,一个“值”)。
对于 sys.modules,键是模块名称(字符串)。这些值是模块对象本身。
您可以使用括号表示法访问字典中的值。所以 uu
只是一个字符串,但是sys.modules['uu']
是模块 uu
。
您可以在此处阅读有关听写的完整故事:http://docs.python.org/tutorial/datastructures.html#dictionaries
关于python - 无法让 __import__() 在 python 中动态导入模块——我知道这是因为它没有出现在 sys.modules 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969097/
我现在正在尝试编码挑战。我之前无法更改代码del __builtins__.__dict__["__import__"] 但之后必须使用 import。我需要一种方法来恢复默认的 __builtins
这是我检查__import__()性能的地方 In [9]: %%timeit ...: math = __import__('math') ...: sqrt = math.sqrt
Python 允许使用别名导入,通过 ...as import 语句中的子句,如下所示: import mymodule as somealias from myothermodule import
假设我有一个包含以下文件的模块包。一个空文件 C:\codes\package\__init__.py 和一些重要文件: 一个位于C:\codes\package\first.py def f():
这个问题在这里已经有了答案: How can I import a module dynamically given its name as string? (10 个答案) 关闭 9 年前。 我在
我正在尝试导入一个模块,同时传递一些全局变量,但它似乎不起作用: 文件 test_1: test_2 = __import__("test_2", {"testvar": 1}) 文件 test_2:
__import__() 函数用于动态加载类和函数 。 如果一个模块经常变化就可以使用 __import__() 来动态载入。 语法 __import__ 语法: __import__(na
我正在尝试编写一些能够抵抗 __import__ 被更改的代码,因为 the Pydev debugger overrides __import__ . 所以,我需要一种访问内置 __import__
我的目录结构是这样的: |- project |- commands.py |- Modules | |- __init__.py | |- base.py | \- build.
我正在为嵌套 matplotlib (MPL) 库编写文档(个人),该文档与 MPL 自己提供的文档不同,由感兴趣的子模块包提供。我正在编写 Python 脚本,希望能够在未来的 MPL 版本中自动生
我的目录结构如下: root/ __main__.py files/ __init__.py foo.py bar.py
我有一个名为 jiva_tasks 的包,我试图通过 celery 导入它(使用 celeryconfig 的 CELERY_IMPORTS 属性。celery 使用的导入语句是这样的: __impo
这里是这个测试中的文件: main.py app/ |- __init__.py |- master.py |- plugin/ |- |- __init__.py |- |- p1.p
我正在查看一些包含两个 __import__ 语句的代码,第二个 __import__ 语句不起作用,除非第一个语句已经运行。 目录结构是这样的: dir1 |-__init__.py |-sub
我正在尝试使用 __import__ 函数从 foo.bar import object 复制 ,但我似乎碰壁了。 一个更简单的例子 from glob import glob 很简单:glob =
使用 __import__ 执行以下操作以便我可以动态指定模块的最佳方法是什么? from module import * 最佳答案 我找到的唯一方法: module = __import__(mod
当使用带点名称的 __import__ 时,例如:somepackage.somemodule,返回的模块不是 somemodule,无论返回什么似乎大多是空的!这是怎么回事? 最佳答案 来自 __i
当我动态导入派生类时,我需要重写 python 中的 __import__ 函数。 (我只能访问基类代码)。例如: Servers=[] class ServerBase(object): n
当a.py有这段代码时: class A(): def __init__(self): print 'hi' 我在这段代码中使用 A 类: import a b = a.A()
对不起,通用标题,一旦我了解了问题的根源,就会更改它我有以下结构: foo/ foo/__init__.py foo/bar/ foo/bar/__init__.py foo/bar/some_mod
我是一名优秀的程序员,十分优秀!