簡體   English   中英

如何處理python導入,以便它們與py2和py3輕松配合?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM