我有一些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”,并且我将在调用实线函数时失去一些性能。
答案 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 pixel
中line.py
import line
,则不能在pixel.py
中执行{{1}},因为您正在进行循环导入。
答案 2 :(得分:3)
一种简单的方法是将以下行添加到draw.py
:
from line import line
在这种情况下,您也可以从line
导入draw.py
。