我知道,相對進口不建議的,比如從PEP8報價:在開發Python模塊時使用絕對導入?
Relative imports for intra-package imports are highly discouraged. Always use the absolute package path for all imports. Even now that PEP 328 is fully implemented in Python 2.5, its style of explicit relative imports is actively discouraged; absolute imports are more portable and usually more readable.
如果我開發包(帶幾個模塊)是什麼?在開發過程中,絕對導入不會在沒有安裝/部署軟件包的情況下運行。這是否意味着我必須定期安裝/部署當前的WIP模塊才能進行測試?
以下是Cld提供的示例。給定一個Python項目/包:
myproject/
package1/
__init__.py
somemodule.py
package2/
__init__.py
somemodule.py
somescript.py
main.py
在main.py
,絕對進口工作得很好:
import package1
import package2.somescript
import package2.somemodule
然而,對於模塊,例如somescript.py
在包2,以下絕對進口:
import package2.somemodule
import package1
這會引發ImportError:
Traceback (most recent call last):
File "package2/somescript.py", line 1, in <module>
import package2.somemodule
ImportError: No module named package2.somemodule
您可以採取的一種方法是將項目的根包含在「PYTHONPATH」環境變量中。然後,所有導入都可以是「絕對」的(即相對於項目的根源)。 – arghbleargh 2014-08-30 15:24:26
這可能是一個解決方案。 – Drake 2014-08-30 16:45:12