0

Pythonパッケージの作成方法を学びたかったので、http://docs.python.org/distutils/index.htmlにアクセスしました。

この演習では、WindowsXPでPython2.6.2を使用しています。

簡単な例に従って、小さなテストプロジェクトを作成しました。

person/

    setup.py

    person/
       __init__.py
       person.py

私のperson.pyファイルは単純です:

class Person(object):   
    def __init__(self, name="", age=0):
        self.name = name
        self.age = age

    def sound_off(self):
        print "%s %d" % (self.name, self.age)

そして私のsetup.pyファイルは次のとおりです。

from distutils.core import setup
setup(name='person',
    version='0.1',
    packages=['person'],
    )

python setup.py sdistを実行すると、MANIFEST、dist /、build/が作成されました。次に、python setup.py installを実行すると、サイトのパッケージディレクトリにインストールされました。

Pythonコンソールを実行してpersonモジュールをインポートできますが、Personクラスをインポートできません。

>>>import person
>>>from person import Person
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name Person

サイトパッケージに追加されたファイルを確認し、コンソールでsys.pathを確認しましたが、問題ないようです。Personクラスをインポートできないのはなぜですか。どこで私は間違えましたか?

4

2 に答える 2

4
person/
   __init__.py
   person.py

と呼ばれるパッケージとperson、その中にあると呼ばれるモジュールがありますperson.person。そのモジュールでクラスを定義したので、それにアクセスするには、次のように言う必要があります。

import person.person
p= person.person.Person('Tim', 42)

メンバーをパッケージ内に直接person配置する場合は、__init__.pyファイルに配置します。

于 2010-04-28T16:48:59.427 に答える
2

あなたの質問は実際にはdistutilsパッケージについてではなく、Pythonパッケージについてです-同じ名前の関連しているが異なるものです。Pythonのパッケージは別の種類のモジュールであり、__init__.pyファイルを含むディレクトリです。クラスを持つモジュールでpersonパッケージを作成しました。あなたにパッケージを与えます。パッケージにモジュールが必要な場合は、が必要です。また、パッケージ内のモジュール内にクラスが必要な場合は、が必要です。personPersonimport personpersonpersonimport person.personPersonpersonpersonfrom person.person import Person

これらのことは、異なるものに同じ名前を付けない場合や、クラスを独自の目的で別々のモジュールに配置しない場合に、はるかに明白になります。また、各クラスを独自の.pyファイルに作成する必要がありますか?も参照してください。

于 2010-04-28T16:49:33.503 に答える