我想学习如何创建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 build sdist,它创建了MANIFEST、dist/和setup.py /。接下来,我运行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类。我哪里错了?
发布于 2010-04-29 00:48:59
person/
__init__.py
person.py您有一个名为person的包,其中有一个名为person.person的模块。您在该模块中定义了类,因此要访问它,您必须说明:
import person.person
p= person.person.Person('Tim', 42)如果您希望将成员直接放入包person中,则应将它们放入__init__.py文件中。
发布于 2010-04-29 00:49:34
您的问题实际上不是关于distutils包,而是关于Python包--同名的相关但不同的东西。Python中的包是一种单独的模块,是包含__init__.py文件的目录。您创建了一个person包,其中包含一个带有Person类的person模块。import person会给你这个包。如果希望在person包中包含person模块,则需要import person.person。如果希望在person包的person模块中包含Person类,则需要使用from person.person import Person。
当你不给不同的东西以相同的名称,或者你不把类放在单独的模块中时,这些事情就会变得更加明显。另请参阅Should I create each class in its own .py file?
https://stackoverflow.com/questions/2731452
复制相似问题