Python - 将包类导入控制台全局命名空间

时间:2009-09-30 16:04:52

标签: python import console namespaces global

我在让我的python类在python控制台中工作时遇到了麻烦。我想自动将所有类导入到全局命名空间中,这样我就可以使用它们而不需要任何prefix.module.names。

这是我到目前为止所得到的......

projectname/
|-__init__.py
|
|-main_stuff/
  |-__init__.py
  |-main1.py
  |-main2.py
  |
  |-other_stuff/
    |-__init__.py
    |-other1.py
    |-other2.py

每个文件定义一个同名的类,例如main1.py将定义一个名为Main1的类。

我的PYTHONPATH是projectname /.// p>的绝对路径

我有一个包含以下内容的python启动文件:

from projectname import *

但是这根本不能让我使用我的课程。在启动python控制台时,我希望能够写下:

ob=Main1()

但是Main1不在当前命名空间内,所以它不起作用。

我尝试在__init__.py个文件中添加内容...

projectname/__init__.py

import main_stuff

projectname/main_stuff/__init__.py

import other_stuff
__all__ = ["main1", "main2", "main3"]

等等。在我的启动文件中,我添加了:

from projectname.main_stuff import *
from projectname.main_stuff/other_stuff import *

但是为了在python控制台中使用这些类,我仍然需要编写:

ob=main1.Main1()

我不想要main1.部分。有没有人知道在使用python控制台时如何自动将我的类放在全局命名空间中?

感谢。

====编辑====

我需要的是在类级别导入包,但是from package import *在模块级别提供了所有内容。我正在采取这样简单的方法:

for module in package do:
    from package.module import *

====另一个编辑====

我最终将类导入分别添加到我的python启动文件中。它不是理想的,因为维护它的开销,但它做我想要的。

from class1.py import Class1
from class2.py import Class2
from class3.py import Class3

1 个答案:

答案 0 :(得分:18)

您想使用其他形式的导入。

projectname/main_stuff/__init__.py

from other_stuff import *
__all__ = ["main1", "main2", "main3"]

使用这样的语句时:

import foo

您正在当前模块中定义名称foo。然后你可以使用foo.something来获取foo中的内容。

使用时:

from foo import *

您正在获取foo中定义的所有名称并在此模块中定义它们(例如将foo中的一桶名称倒入模块中)。