【发布时间】:2013-09-07 02:48:07
【问题描述】:
我正在使用 python 3,我有一个名为 "http" (mypackage.http) 的模块,我还有另一个名为 foo 的模块,我想加载内置的 http module(不是我的 mypackage.http 模块)
我可以使用
imp.find_module('http', sys.path[1:])
获取内置的__ init__.py importlib path
例子:
/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python3.3/importlib/__ init__.py
但不推荐使用 imp.find_module()/load_module()。
如何通过importlib 等其他方式导入这个内置的http module?
项目示例:
- 我的包裹
- _init _.py
- http.py(有相关的http类等)
- foo.py(需要使用内置的http而不是mypackage.http)
谢谢!
【问题讨论】:
-
你能举一个有问题的代码/包布局的例子吗?使用绝对导入(如在 Python 3 中),除非您尝试直接执行包中的文件,否则不会出现此问题。
-
为什么我不能为我的模块命名?
-
为什么python不使用内置的包导入方式?像 import builtin.sys 一样,我将能够根据需要命名我的模块,import mypackage.sys,或 import .sys (relative),import sys(relative) 等
-
你可以,但你需要让它更像命名空间......但一般来说,你希望独特的模块名称作为良好 python 设计的一部分。
-
@fj123x: 当你得到这个错误时你在做什么?您是否将文件
foo.py作为脚本运行?
标签: python dynamic module built-in