给定以下包:
testpackage
__init__.py
testmod.py
testmod2.py
__init__.py
的内容from . import testmod
from . import testmod2
testmod.py
的内容# relative import without conditional logic, breaks when run directly
from . import testmod2
...
if __name__ == '__main__':
# do my module testing here
# this code will never execute since the relative import
# always throws an error when run directly
testmod2.py
的内容if __name__ == 'testpackage.testmod2':
from . import testmod
else:
import testmod
...
if __name__ == '__main__':
# test code here, will execute when the file is run directly
# due to conditional imports
这不好吗?有没有更好的办法?
最佳答案
无疑,这将成为将来维护的麻烦。不仅仅是条件导入...更多是您必须进行条件导入的原因,即运行testpackage/testmod2.py
作为主脚本会导致sys.path
的第一项为./testpackage
而不是.
,这使得testpackage作为软件包的存在消失了。
相反,我建议通过python -m testpackage.testmod2
运行testmod2,并从testpackage
外部进行操作。 testpackage.testmod2
仍将显示为__main__
,但条件导入将始终有效,因为testpackage
将始终是程序包。-m
的缺点是它需要Python 2.5 or newer。
关于python - Python中的条件相对导入…做还是不做?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7184663/