别名为python模块

时间:2012-01-06 12:41:15

标签: python

我有一些python模块,我导入为:

from mygraph.draw import pixel

文件结构如下:

mygraph/
    __init__.py
    draw.py

draw.py包含def pixel()

现在,我想添加另一个函数line(),我想将其导入为

from mygraph.draw import line

我只需将line添加到draw.py即可。但是,我希望将line()放在一个单独的文件line.py中,而不要使用draw.py。但是,如果我将它放在一个单独的文件中,它将被导入为

from mygraph.line import line

这不是我想要的......

是否有可能以某种方式“别名”line.py所以它在draw模块中可见,但是在separete文件中?我想在draw

中添加一个虚函数
def line():
    return real_line.line()

但是在这种情况下,我不会从原始line获得“docstring”,并且我将在调用实线函数时失去一些性能。

3 个答案:

答案 0 :(得分:5)

draw.py模块中尝试此操作:

from line import line

您应该可以将其作为mygraph.draw.line调用,并按照您想要的方式导入。

我在__init__.py文件中做了很多这样的事情:以这种方式公开主API。

答案 1 :(得分:4)

这样的结构对你来说更有意义:

mygraph/
    __init__.py
    draw/
        __init__.py
        pixel.py
        line.py

然后在draw/__init__.py中你会得到这样的代码:

from mygraph.draw.pixel import pixel, redpixel, greenpixel
from mygraph.draw.line import line, redline, greenline

使用你的包很方便:

from mygraph.draw import redpixel, redline

请注意循环导入。例如,如果line需要pixel才能工作,而import pixelline.py import line,则不能在pixel.py中执行{{1}},因为您正在进行循环导入。

答案 2 :(得分:3)

一种简单的方法是将以下行添加到draw.py

from line import line

在这种情况下,您也可以从line导入draw.py