[英]Distutils - Where Am I going wrong?
我想学习如何创建python包,因此访问了http://docs.python.org/distutils/index.html 。
在本练习中,我将在Windows XP上使用Python 2.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类。 我哪里做错了?
person/
__init__.py
person.py
您有一个名为person
的程序包,并且其中有一个名为person.person
的模块。 您在该模块中定义了该类,因此要访问它,您必须说:
import person.person
p= person.person.Person('Tim', 42)
如果要将成员直接放在打包person
内部,则可以将它们放在__init__.py
文件中。
您的问题不是关于distutils软件包,而是关于Python软件包-一个相关但不同的名称。 Python中的软件包是一种单独的模块,是带有__init__.py
文件的目录。 您使用带有Person
类的person
模块创建了一个person
包。 import person
给您包裹。 如果你想在person
的内部模块person
包,需要import person.person
。 如果要在person
包内的person
模块中包含Person
类,则需要from person.person import Person
。
当您不给不同的事物使用相同的名称时,以及当您不出于自己的考虑将类放在单独的模块中时,这些事情将变得更加明显。 另请参见我应该在自己的.py文件中创建每个类吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.