首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Distutils -我哪里错了?

Distutils -我哪里错了?
EN

Stack Overflow用户
提问于 2010-04-29 00:46:10
回答 2查看 341关注 0票数 0

我想学习如何创建python包,所以我访问了http://docs.python.org/distutils/index.html

在本练习中,我在Windows XP上使用Python 2.6.2。

我按照这个简单的例子创建了一个小的测试项目:

代码语言:javascript
复制
person/

    setup.py

    person/
       __init__.py
       person.py

我的person.py文件很简单:

代码语言:javascript
复制
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文件是:

代码语言:javascript
复制
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类。

代码语言:javascript
复制
>>>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类。我哪里错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-29 00:48:59

代码语言:javascript
复制
person/
   __init__.py
   person.py

您有一个名为person的包,其中有一个名为person.person的模块。您在该模块中定义了类,因此要访问它,您必须说明:

代码语言:javascript
复制
import person.person
p= person.person.Person('Tim', 42)

如果您希望将成员直接放入包person中,则应将它们放入__init__.py文件中。

票数 4
EN

Stack Overflow用户

发布于 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?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2731452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档