2012-04-16 5 views
2

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

コード:

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 
+2

あなたが実行コードとあなたが得るトレースバックを提供してください。 –

答えて

5

を試してみました:

MachO(DivXInstaller.dmg) 

ただし、MachOという名前はどこにも定義されていません。だから、Pythonはあなたが名前マッチョ下マッチョモジュールを使用したい場合、あなたはそれをインポートする必要がエラー

NameError: name 'MachO' is not defined 

であなたにこれを伝えます:

from macholib import MachO 

これあなたがしている、行っていませんあなたのエラーの原因。あなたがしたのは

import macholib 

です。これはあなたが使用できる "macholib"という名前を与えてくれました。しかし、マジョリブにはほとんどがサブモジュールが含まれています。このようなサブモジュールはアクセスできないので、特に有用ではありません。名前空間を汚染したくない場合は、それが可能になるだろうので、あなたは、どちらかDivXInstaller.dmgを定義していないmacholib.MachO

としてあなたはマッチョモジュールへのアクセスを提供します

import machlibo.MachO 

としてマッチョをインポートすることができますあなたの次のエラー。プログラミングを始める前に、Pythonチュートリアルを読むことをお勧めします。

+0

うわあ、ありがとう、私はそれも尋ねる前に初心者の質問だったことを実現し、私は彼らがループの詳細について説明したチュートリアルを行ったが、このようなマイナーな詳細については、ありがとう。また、machOヘッダファイルの例を知ることもあります。また、コマンドラインツールを使用するためのドキュメントを提供しているmacholibページでは、それらをどのように使用することができます。 – user1241790

+1

@ user1241790:Pythonにヘッダファイルはありません。これは「マイナーディテール」ではなく、チュートリアルの一部ですが、forループのような言語構造についての最初のものではありません。 –

2

インポートステートメントは、namespaceを定義します。したがって、モジュールまたはパッケージで定義されたものを使用するには、それを修飾する必要があります。 this caseでは、モジュール自体はmacholib.MachOですが、実際にはclass MachOと同じ名前であるため、import macholib.MachOにする必要があります。macholib.MachO.MachOを使用する必要があります(これを行うとエラーが発生します"DistributionNotFound:altgraph"、しかし)。

さらに、引数としてファイル名をとります。これは文字列です。また、あなたは実際にクラスのインスタンスを作成しているので、あなたはおそらく

mlib = macholib.MachO.MachO("DivXInstaller.dmg") 
今実際にあなたがさらに呼び出して操作する必要があるオブジェクトMLIBある

...

代わり

あなたがfrom macholib import MachOを行うことができますかを意味しますたとえfrom macholib.MachO import MachOでもMachO.MachO(...)またはMachO(...)を直接使用することができます。

A Pythonモジュールは単にPythonのソースファイルです:あなたは、Python パッケージのインポートから対モジュール輸入を理解していれば

0

は、これはとても簡単です。

Pythonパッケージは単なるPythonモジュールのディレクトリです。

の1- インポート

import package1.package2.module1 

あなたが全体のネームスペースを使用する必要がありますModule1のクラス、関数や変数にアクセスするには:

package1.package2.modlue1.class1あなたはクラスや関数をインポートすることはできませんこの方法:(間違った)

import package1.package2.class1 

2 - から...輸入

代わりに単一のクラス、関数や変数モジュールのインポートする「から」使用:

from package1.package2.module1 import class1 

全体のネームスペースに対処する必要はありません。)(class1.method1を

注動作するようになりましたことあなたはこのよう

クラスのメソッドをインポートすることはできません。

日時は、モジュールのクラスであります(utcnowにアクセスするためのutcnow(と呼ばれるメソッドを持っている日時)、)1はできる:

import datetime 
datetime.datetime.utcnow() 

それとも

from datetime import datetime 
datetime.utcnow() 
関連する問題