我正在寻找一种编写python包和模块的方法,使它们对Python 3很友好,而且它也很容易导入它们。
最常见的情况是您要为用户提供一个主要类,称之为MyCode
。
您的包名为mycode
,您可以将MyCode类的正文放入mycode/mycode.py
。
现在,你会期望人们可以做其中的一件事:
import mycode
obj = mycode.MyClass()
或:
from mycode import MyClass()
obj = MyClass()
现在,问题是你应该把它放在__init__.py
里面,以便在python 2.6+和3.x中完成这项工作。
答案 0 :(得分:1)
使用绝对导入,它可以在python版本中正常工作。在mycode/__init__.py
里面放了:
from __future__ import absolute_import
from mycode.mycode import MyClass
__future__
导入从Python 2.5及以后开始工作;见PEP 328。如果没有absolute_import
导入,则import mycode
不明确; Python 3将它视为绝对包并加载顶级包,Python 2将其视为相对包并导入嵌套模块。
另一种方法是使用相对导入:
from .mycode import MyClass
将适用于相同版本的版本。
答案 1 :(得分:0)
将from mycode import *
添加到mycode/__init__.py
的开头会使mycode/mycode.py
的内容从mycode
包中导入,就像它只是{{1}这样的普通模块,与您mycode.py
脚本(import mycode
)所在目录中的mycode.py
相同,或者相对导入/mycode/
...