情况: - 我的project_folder中有一个名为calendar的模块 - 我想使用Python库中的内置Calendar类 - 当我使用日历导入日历时,它会抱怨因为它试图从我的模块加载.
我做了一些搜索,似乎无法找到问题的解决方案.
任何想法,而无需重命名我的模块?
Python 文档指出:
\n\n\n\n\n冻结模块是用 Python 编写的模块,其编译的字节码对象由 Python\xe2\x80\x99s freeze 实用程序合并到定制的 Python 解释器中。现在请参阅工具/冻结/。
\n
http://docs.python.org/library/imp.html#imp.init_frozen
\n\n我不明白。什么是冻结实用程序?如何使用?为什么会使用它?
\n最近我遇到了这个"Hello world"Python程序:
>>> import __hello__
Hello world!
Run Code Online (Sandbox Code Playgroud)
我想知道它是如何工作的以及如何查看__hello__模块的源代码 .
我一直在尝试importlib与python3(3.6)一起使用。
目录结构
main.py
#Note: I will only modify line 4 that uses importlib
import importlib
if __name__ == '__main__':
print("In main.py")
hello = importlib.import_module('hello', package='./')
print("Loaded hello.py")
hello.hello()
Run Code Online (Sandbox Code Playgroud)
你好
def hello():
print('Hello world')
Run Code Online (Sandbox Code Playgroud)
文件夹/hello.py
def hello():
print('Hello world in folder')
Run Code Online (Sandbox Code Playgroud)
观察结果
如果我做
hello = importlib.import_module('hello', package='./') 要么
hello = importlib.import_module('hello')
它从根文件夹导入hello.py并进行打印hello world。
如果我做
hello = importlib.import_module('folder.hello')
它从根文件夹导入folder / hello.py并打印hello world in folder。
但是如果我这样做
hello = importlib.import_module('hello', package='folder') 要么
hello = …
import python-import dynamic-import python-3.x python-importlib
Python 模块、内置模块、标准模块和冻结模块有什么区别?
这些术语来自官方文档本身。
加载器文档中提到了Python 模块和内置模块:
装载机必须满足以下要求:
- 如果模块是 Python 模块(而不是内置模块或动态加载的扩展),加载器应该在模块的全局命名空间 (module.__dict__) 中执行模块的代码。
顶级组件文档中引用了标准模块:
所有内置和标准模块均可用
Frozen 模块有自己的导入器,描述为
冻结模块的进口商
尽管在官方文档和核心代码中有提及,但在词汇表、索引(B、F、M、P或S)或(显然)中没有对 Python 模块、内置模块、标准模块或冻结模块的明确定义别处。
这是我可以为内置模块提出的最佳定义:
甲内置模块是一种扩展模块,其在所列出的(即用C语言编写,Java和.NET等)
sys.builtin_module_names属性。请注意,此列表可能因 Python 解释器而异(即 Cython 的内置模块可能不是 IronPython 的内置模块等)。
我从以下来源拼凑了这个定义:
该库包含内置模块(用 C 编写)
该importlib.machinery.BuiltinImporter文档的状态,
所有已知的内置模块都列在
sys.builtin_module_names.
该sys.builtin_module_names反过来状态属性的文件,
编译到此 Python 解释器中的所有模块的名称。(此信息无法通过任何其他方式获得) …