关于python的模块导入系统

时间:2012-12-04 18:39:23

标签: python

我对python的模块系统有一些疑问并导入它们。我有以下应用程序的结构:

preloader/   
    preload.py
    Core/
        Generator.py
        Logger.py
        ErrorHandling.py
    Libraries/
        MySQLi.py
        memcached.py

__init__.py文件存在于每个文件夹中,即使在根级别也是如此,从结构中省略,以便提高可读性。

内部preload.py我想导入memcached模块。所以我写from Libraries import memcached。在memcached.py内,我有一个名为Memcached的班级。因此,当我必须实例化它时,我必须编写类似mem = memcached.Memcached()的内容。如何避免撰写modulename.classname()而只是classname()

我也在preload.py from preloader.Libraries.memcached import Memcached内尝试了这个。这给了我没有这样的模块错误!!

另一个问题。有人请对相关进口情况有所了解。 preload.py内部有一个名为ThreadManager的类我希望这个类在ErrorHandling.py中。我怎样才能做到这一点?我试过相对导入from .. import preload。然后当我运行preload.py时,我收到错误ValueError: Attempted relative import beyond toplevel package。然后我尝试了from preload import ThreadManager。但是它正在进行循环导入,所以我无法导入它。如何解决这个问题?

python版本2.7.3

1 个答案:

答案 0 :(得分:2)

您可以使用from package.module import names类的Memcached语法:

from Libraries.memcached import Memcached

然后在代码中使用Memcached代替memcached.Memcached

如果您需要使用其他模块中的ThreadManager,并且遇到循环导入,则应重新组织模块。将ThreadManager移至新模块,然后从preloadCore.ErrorHandling导入该类。