加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在带有if __name __ =’__ main__’块的Python3中

发布时间:2020-12-17 17:36:44 所属栏目:Python 来源:网络整理
导读:我正在制作一个包,如果__name __ ==__ main__:测试用的块,则该包中的模块内部都有代码.但是我尝试在这些模块中使用相对导入会导致错误. 我已经阅读了此主题以及其他十亿主题: Relative imports for the billionth time 在将其标记为重复项之前,如果我想做

我正在制作一个包,如果__name __ ==’__ main__’:测试用的块,则该包中的模块内部都有代码.但是我尝试在这些模块中使用相对导入会导致错误.

我已经阅读了此主题以及其他十亿主题:
Relative imports for the billionth time

在将其标记为重复项之前,如果我想做的事情在Python3中是不可能的,那么我的问题是为什么它在Python2中能工作,是什么促使在Python3中做出如此麻烦的决定?

这是我的示例Python项目:

mypackage
- module1.py
- module2.py
- __init__.py

__init__.py和module2.py为空

module1.py包含:

import module2

# module1 contents

if __name__=="__main__":
    # Some test cases for the contents of this module
    pass

在Python2中可以正常工作.我可以从计算机上其他任何地方的其他项目中导入module1,也可以直接运行module1并在if块中运行代码.

但是,此结构在Python3中不起作用.如果我尝试将模块导入其他地方,它将失败:

>>> from mypackage import module1
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "C:_MyFilesProgrammingPython Modulesmypackagemodule1.py",in <module>
    import module2
ModuleNotFoundError: No module named 'module2'

因此,我尝试将第一行更改为从.导入module2,并对其进行了修复,因此我可以成功地从任何地方导入模块.但是,当我尝试直接将module1作为脚本运行时,出现此错误:

Traceback (most recent call last):
  File "C:/_MyFiles/Programming/Python Modules/mypackage/module1.py",in <module>
    from . import module2
ImportError: cannot import name 'module2' from '__main__' (C:/_MyFiles/Programming/Python Projects/pgui/mypackage/module1.py)

我不想每次在模块上工作时都想打开控制台并键入python -m myfile并想直接将其作为脚本运行.

我希望能够像在Python2中那样使用相对导入,而无需将其父文件夹添加到PYTHONPATH即可处理模块

有没有更好的解决方法或解决这些问题的方法?

最佳答案
根据Module documentation,对于__main__模块,您必须使用绝对导入.

Note that relative imports are based on the name of the current module. Since the name of the main module is always “main“,modules intended for use as the main module of a Python application must always use absolute imports.

因此,只需将module1.py中的导入行更改为:

从mypackage导入模块2

其他所有内容保持不变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读