模块还是包装?


140

每当我做什么时,from 'x' import 'y'我都想知道哪个模块被认为是“模块”,哪个模块被认为是“包装”,为什么它又不是?


1
至于为什么它的周围没有其他的方式,请参阅stackoverflow.com/questions/3600352/...

1
我对此表示感谢,因为答案很简洁,并提供了确切的必要知识。该文档很好用,但花哨的且包含的信息远远超出了OP的要求,而且肯定比我需要的更多。我只是想要一个特定问题的答案,而下面的答案正是我想要的。我们许多人只是不需要这样的正式或深入的答案。
Teekin

一个相关的概念
-Python中的

Answers:


192

Python模块只是Python源文件,它可以公开类,函数和全局变量。

从另一个Python源文件导入时,该文件名被视为名称空间。

Python包只是Python模块的目录。

例如,想象以下目录树/usr/lib/python/site-packages

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py

因此,您将执行以下操作:

import mypackage.mymodule

要么

from mypackage.mymodule import myclass

啊哈,所以当您说文件名被视为名称空间时,您会这样吗?第一种情况是“ mymodule.var1”,第二种情况是“ myclass.var1”?
黑暗圣堂武士

1
不完全是。程序包仍然算作名称空间的一部分。如果您想按照您说的去做,则需要从mypackage导入mymodule。
Yam Marcovic

添加一些有关名称空间包的信息可能很有用,因为它们的代码不必全部都出现在同一目录树中。
holdenweb '17

@holdenweb从未直接使用那里涉及的不同机制,所以不是专家。如果您在新的答案中提供了有关它的详细说明,我将从我的网站上引用它。
Yam Marcovic

回想起来,可能有点太深奥不值得了
holdenweb '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.