2

だから私の最初のpythonプログラム、私はPYPIからmacholibパッケージをダウンロードし、それを解凍し、python installを使用してsetup.pyをインストールしました。今、私は最初にmacholibをインポートするプログラムを実行しようとしています。 macho のようなメソッドを使用すると、macholib モジュールに Macho という属性がないというエラーが表示されます。私の理解では、macholib はパッケージであり、モジュールなどではないため、パッケージの内容を使用することはできません。答えてください、私はこのような単純な初心者の問題にあまりにも多くの時間を無駄にしました. 最新バージョンの Python を搭載した Mac を実行しています。

コード:

import sys
import macholib
MachO(DivXInstaller.dmg) 

macholib.MachO(DivXInstaller.dmg) と macholib.MachO.MachO(DivXInstaller.dmg) を試してみました

Error for python test.py 
Traceback (most recent call last):
  File "test.py", line 3, in <module>
    MachO(DivXInstaller.dmg)
NameError: name 'MachO' is not defined
4

3 に答える 3

5

コードに次の行があります。

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

これにより、MachO モジュールに次のようにアクセスできます。macholib.MachO

どちらも定義していないDivXInstaller.dmgので、それが次のエラーになります。プログラミングを開始する前に、Python チュートリアルを実行することをお勧めします。

于 2012-04-16T09:52:51.057 に答える
2

importステートメントは名前空間を定義します。したがって、モジュールまたはパッケージで定義されているものを使用するには、それを修飾する必要があります。この場合、モジュール自体はですmacholib.MachOが、実際class MachOには少し紛らわしいことに同じ名前であるため、深く掘り下げる必要があるため、使用する必要がimport macholib.MachOありますmacholib.MachO.MachO(これを実行しようとすると、「DistributionNotFound:」というエラーが発生することに注意してください。ただし、altgraph」)。

さらに、引数としてファイル名(文字列)を使用することに注意してください。さらに、実際にはクラスのインスタンスを作成しているので、おそらく

mlib = macholib.MachO.MachO("DivXInstaller.dmg") 

ここで、mlibは実際には、さらに呼び出しを行って操作する必要のあるオブジェクトです...

または、直接使用することfrom macholib import MachOfrom macholib.MachO import MachOできます。MachO.MachO(...)MachO(...)

于 2012-04-16T10:06:17.470 に答える