在setup.py之后,必须从包中显式导入模块

时间:2013-04-22 14:33:47

标签: python installation distutils setup.py

我刚刚使用安装脚本创建了我的第一个Python包,我想知道这种行为是否正常。它由一个包含我想要访问的类的模块组成。项目结构如下:

.
|
+ -- __init__.py
+ -- setup.py
my_package
    |
    + __init__.py
    + my_class.py

__init__.py始终为空。

当我安装它时,这是我期望的行为:

>>> import my_package
>>> my_class.MyClass()
A new object is born!

相反,如果我这样做,我只能这样做:

>>> from my_package import my_class
>>> my_class.MyClass()
A new object is born!

我的包和我的类文件的名称相同,如果相关的话。这是一个糟糕的包装设计案例吗?我发现我可以通过将from my_class import *放在__init__.py中解决问题,但我讨厌使用这些语句,即使它们保留在导入命名空间中。

1 个答案:

答案 0 :(得分:3)

import my_package将导入my_package/__init__.py中定义的内容,因此此行为完全正常。您无法使用my_class,因为您没有对该模块的任何引用。

我不知道您的包设计是还是错误,但是如果您想在导入{{1}时使用MyClass ,只需将此类移动到脚本my_package