如何处理python导入,以便它们可以轻松地使用py2和py3?

2024-04-20 11:36:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种方法来编写python包和模块,使它们对python3友好,也使它们易于导入。你知道吗

最常见的情况是,有一个主要类要提供给用户,称之为MyCode。你知道吗

您的包将被命名为mycode,您将把MyCode类的主体放入mycode/mycode.py。你知道吗

现在,你会期望人们可以做其中一件事:

import mycode
obj = mycode.MyClass()

或:

from mycode import MyClass()
obj = MyClass()

现在的问题是,在python2.6+和3.x中,您应该在__init__.py中放置什么来实现这一点


Tags: 模块方法用户frompyimportobjinit
2条回答

from mycode import *添加到mycode/__init__.py的开头将使mycode/mycode.py的内容可以从mycode包导入,就像它只是一个普通的模块,就像mycode.py,就像您从与mycode.py脚本(/mycode/)相同的目录import mycode导入mycode/mycode.py。。。你知道吗

使用绝对导入,它可以在python版本中正常工作。内部mycode/__init__.py输入:

from __future__ import absolute_import

from mycode.mycode import MyClass

其中__future__导入是从python2.5及更高版本开始工作的;请参见PEP 328。没有absolute_import导入,import mycode是不明确的;python3将它视为绝对的并加载顶级包,python2将它视为相对的并导入嵌套模块。你知道吗

另一种方法是使用相对导入:

from .mycode import MyClass

它将在同一系列版本中起作用。你知道吗

相关问题 更多 >