[英]How to deal with python imports so they work easily with py2 and py3?
我正在尋找一種編寫python軟件包和模塊的方法,使它們對Python 3友好,並且也易於導入它們。
最常見的情況是,您有一個要提供給用戶的主要類,稱為MyCode
。
您的程序包將命名為mycode
,並將MyCode類的主體放入mycode/mycode.py
。
現在,您希望人們可以執行以下操作之一:
import mycode
obj = mycode.MyClass()
要么:
from mycode import MyClass()
obj = MyClass()
現在,問題是在python 2.6+和3.x中都應該在__init__.py
中放入什么才能使它起作用。
使用絕對導入,它將在python版本之間正常工作。 在mycode/__init__.py
內部放置:
from __future__ import absolute_import
from mycode.mycode import MyClass
從python 2.5及更高版本開始__future__
導入的位置; 參見PEP 328 。 如果沒有absolute_import
導入,則import mycode
模棱兩可; Python 3將其視為絕對,並加載頂級包,Python 2將其視為相對,然后導入嵌套模塊。
另一種方法是使用相對導入:
from .mycode import MyClass
可以在相同的版本范圍內使用。
from mycode import *
添加到mycode/__init__.py
將使mycode/mycode.py
的內容可從mycode
包中導入,就像它只是一個普通的模塊(如mycode.py
)一樣,與從中import mycode
時一樣與mycode.py
腳本( /mycode/
)相同的目錄,或相對導入mycode/mycode.py
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.