从python包中导入模块,这是一个基本问题,我想我可以';我甚至找不到答案

从python包中导入模块,这是一个基本问题,我想我可以';我甚至找不到答案,python,Python,所以我的第一个python程序,我从PYPI下载了macholib包,然后解压并使用python安装运行setup.py,现在我尝试运行一个程序,首先导入macholib,然后当我尝试访问Macho之类的方法时,它会给我一个错误,说macholib模块没有称为Macho的属性。 我的理解是macholib是一个包,而不是模块或其他东西,因此我不能使用包中的内容。 请回答,我在这样一个简单的新手问题上浪费了太多时间。 使用最新版本的python运行mac 代码: 我试过macholib.MachO

所以我的第一个python程序,我从PYPI下载了macholib包,然后解压并使用python安装运行setup.py,现在我尝试运行一个程序,首先导入macholib,然后当我尝试访问Macho之类的方法时,它会给我一个错误,说macholib模块没有称为Macho的属性。 我的理解是macholib是一个包,而不是模块或其他东西,因此我不能使用包中的内容。 请回答,我在这样一个简单的新手问题上浪费了太多时间。 使用最新版本的python运行mac

代码:

我试过macholib.MachO(DivXInstaller.dmg)和macholib.MachO.MachO(DivXInstaller.dmg)

python test.py的
错误
回溯(最近一次呼叫最后一次):
文件“test.py”,第3行,在
男子气概(DivXInstaller.dmg)
NameError:未定义名称“MachO”

您的代码中有这一行:

MachO(DivXInstaller.dmg) 
然而,MachO这个名字在任何地方都没有定义。所以Python会告诉您这个错误

NameError: name 'MachO' is not defined
如果您想使用名称为MachO的MachO模块,则必须导入该模块:

from macholib import MachO
这是你没有做的,这是你的错误的原因。你所做的只是

import macholib
这给了你一个可以使用的名字“macholib”。然而,macholib主要包含子模块,您不能像那样访问这些子模块,因此这不是特别有用。如果不想污染名称空间,可以将MachO作为

import machlibo.MachO
这使您可以通过
macholib.MachO


您也没有定义
DivXInstaller.dmg
,因此这将是您的下一个错误。我建议您在开始使用Python编程之前先阅读Python教程。

导入语句定义。因此,为了使用模块或包中定义的内容,您需要对其进行限定。在中,模块本身是
macholib.MachO
,但您需要深入挖掘实际的
类MachO
,该类名称稍有混淆,因此您需要
导入macholib.MachO
并使用
macholib.MachO.MachO
(请注意,当我尝试这样做时,会得到一个错误“DistributionNotFound:altgraph”但是)

进一步注意,它将文件名作为参数,即字符串。此外,您实际上正在创建一个类的实例,所以您可能是指

mlib = macholib.MachO.MachO("DivXInstaller.dmg") 
现在,mlib实际上是需要通过进一步调用操作的对象


或者,您可以从macholib导入MachO中执行
,或者甚至从macholib导入MachO中执行
。MachO导入MachO
,因此您可以使用
MachO.MachO(…)
MachO(…)
直接导入。

如果您了解Python软件包与模块的对比,以及导入与导入的对比,这是非常简单的:

import package1.package2.module1
Python模块只是一个Python源文件

Python包只是Python模块的目录

1-导入

import package1.package2.module1
要访问module1类、函数或变量,应使用整个命名空间:package1.package2.modlue1.class1

不能以这种方式导入类或函数:(错误)

2-来自。。。导入

而是使用“from”导入模块的单个类、函数或变量:

from package1.package2.module1 import class1
不需要处理整个名称空间:class1.method1()现在可以工作了

请注意,不能以这种方式导入类的方法

示例

import package1.package2.module1
datetime是模块datetime的一个类,它有一个名为utcnow()的方法,要访问utcnow(),可以:

import datetime
datetime.datetime.utcnow()


请提供您运行的代码和您得到的回溯。哇,非常感谢,在我提出这个问题之前,我就意识到这是一个新手问题,我已经阅读了他们详细描述的关于for循环的教程,但不是像这样的小细节,非常感谢。你也会碰巧知道一个machO头文件的例子。还有macholib页面,他们提供了使用命令行工具的文档。@user1241790:Python中没有头文件。这不是一个“小细节”,它是任何教程的一部分,但不会在开始,正如您所说的,它是关于语言构造的,比如for循环。
import datetime
datetime.datetime.utcnow()
from datetime import datetime
datetime.utcnow()